日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Opencv实战】这个印章“神器”够牛,节省了时间提高了效率,厉害~(附完整源码)

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Opencv实战】这个印章“神器”够牛,节省了时间提高了效率,厉害~(附完整源码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

🚀 作者 :“程序員梨子”

🚀 **文章簡介 **:本篇文章主要是寫了opencv的提取印章文字小程序!

🚀 **文章源碼免費獲取 : 為了感謝每一個關注我的小可愛💓每篇文章的項目源碼都是無

償分享滴💓👇👇👇👇

點這里藍色這行字體自取,需要什么源碼記得說標題名字哈!私信我也可!

🚀 歡迎小伙伴們 點贊👍、收藏?、留言💬

正文

這期分享的是使用opencv提取印章,很多時候我們需要電子版的章,所以今天就帶大家使用代碼

提取出來!

Photoshop雖然強大,但是奈何小編不會使啊,昨天就有一個小伙伴問我能不能幫忙,這不?PS雖

然我不會,但是我會寫代碼呀!這可難不倒我!安排安排~

(特別提醒:所有愛好設計和喜歡做圖的小伙伴們,切記千萬不要幫著老板或者朋友PS偽造公

章,刑法第280條特別指出,偽造證件印章,是可以追究刑事責任的,違法的事情不要做哦。)

教程送👇,源碼就文末或者前文的藍色字體自己免費拿哈——來咯!

1)效果展示

原圖——

效果圖——

?2)源碼展示

import cv2 import numpy as npclass Seal:def __init__(self, img_path):"""初始化圖片:param img_path: 原始圖片路徑 """self.image = cv2.imread(img_path)self.img_shape = self.image.shapeself.file_name = img_path.split('.')[0].split('\\')[-1]def unify_img_size(self):"""統一圖片的大小:return:返回一張未處理的目標圖片 """img_w = 650 if self.img_shape[1] > 600 else 400self.image = cv2.resize(self.image, (img_w, int(img_w * self.img_shape[0] / self.img_shape[1])), interpolation=cv2.IMREAD_COLOR)impng = cv2.cvtColor(self.image.copy(), cv2.COLOR_RGB2RGBA)return impngdef img_binaryzation(self,hue_image, low_range, high_range, imgpng):th = cv2.inRange(hue_image, low_range, high_range)element = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 1))th = cv2.dilate(th, element)index1 = th == 255print_img = np.zeros(imgpng.shape, np.uint8)print_img[:, :, :] = (255, 255, 255, 0)print_img[index1] = imgpng[index1] # (0,0,255)return print_imgdef img_enhance(self):imgpng = self.unify_img_size()hue_image = cv2.cvtColor(self.image, cv2.COLOR_BGR2HSV) # 處理圖像色調low_range = np.array([130, 43, 46]) # 設下邊界high_range = np.array([180, 255, 255]) # 設上邊界print1 = self.img_binaryzation(hue_image, low_range, high_range, imgpng)low_range = np.array([0, 43, 46])high_range = np.array([9, 255, 255])print2 = self.img_binaryzation(hue_image, low_range, high_range, imgpng)imgreal = cv2.add(print2, print1)white_px = np.asarray([255, 255, 255, 255])(row, col, _) = imgreal.shapefor r in range(row):for c in range(col):px = imgreal[r][c]if all(px == white_px):imgreal[r][c] = imgpng[r][c]return imgrealdef extension_img(self):"""邊緣檢測,截取并輸出結果:return:"""imgreal = self.img_enhance()# 擴充圖片防止截取部分print4 = cv2.copyMakeBorder(imgreal, 50, 50, 50, 50, cv2.BORDER_CONSTANT, value=[255, 255, 255, 0])print2gray = cv2.cvtColor(print4, cv2.COLOR_RGBA2GRAY)_, grayfirst = cv2.threshold(print2gray, 254, 255, cv2.THRESH_BINARY_INV)element = cv2.getStructuringElement(cv2.MORPH_RECT, (22, 22))img6 = cv2.dilate(grayfirst, element)c_canny_img = cv2.Canny(img6, 10, 10)contours, hierarchy = cv2.findContours(c_canny_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)areas = []for i, cnt in enumerate(contours):x, y, w, h = cv2.boundingRect(cnt)area = w * hars = [area, i]areas.append(ars)areas = sorted(areas, reverse=True)maxares = areas[:1]x, y, w, h = cv2.boundingRect(contours[maxares[0][1]])print5 = print4[y:(y + h), x:(x + w)]# 高小于寬if print5.shape[0] < print5.shape[1]:zh = int((print5.shape[1] - print5.shape[0]) / 2)print5 = cv2.copyMakeBorder(print5, zh, zh, 0, 0, cv2.BORDER_CONSTANT, value=[255, 255, 255, 0])else:zh = int((print5.shape[0] - print5.shape[1]) / 2)print5 = cv2.copyMakeBorder(print5, 0, 0, zh, zh, cv2.BORDER_CONSTANT, value=[255, 255, 255, 0])resultprint = cv2.resize(print5, (150, 150))cv2.imwrite(r'output\{}_result.png'.format(self.file_name), resultprint)if __name__ == '__main__':s = Seal(r"src\2.jpg")s.extension_img()

總結

效果很不錯滴,感興趣的朋友可以試試啦~

關注小編獲取更多精彩內容!記得點擊傳送門哈👇

記得三連哦! 如需打包好的源碼+素材免費分享滴!傳送門

總結

以上是生活随笔為你收集整理的【Opencv实战】这个印章“神器”够牛,节省了时间提高了效率,厉害~(附完整源码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。