【Opencv实战】这个印章“神器”够牛,节省了时间提高了效率,厉害~(附完整源码)
生活随笔
收集整理的這篇文章主要介紹了
【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实战】这个印章“神器”够牛,节省了时间提高了效率,厉害~(附完整源码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Pygame小游戏】别找了,休闲游戏专
- 下一篇: Tomcat下使用Druid配置JNDI