印章提取(Opencv实战这个印章神器够牛节省了时间提高了效率)

前言 作者 :“程序员木子” **文章简介 **:本篇文章主要是写了opencv的提取**文字小程序! **文章源码免费获取 : 为了感谢每一个关注我的小可爱每篇文章的项目源码都是无 偿分享滴 点...

前言

作者 :“程序员木子”

**文章简介 **:本篇文章主要是写了opencv的提取**文字小程序!

**文章源码免费获取 : 为了感谢每一个关注我的小可爱每篇文章的项目源码都是无

偿分享滴

点这里蓝色这行字体自取,需要什么源码记得说标题名字哈!私信我也可!

欢迎小伙伴们 点赞、收藏⭐、留言

「Opencv实战」这个**“神器”够牛节省了时间提高了效率,厉害

正文

「Opencv实战」这个**“神器”够牛节省了时间提高了效率,厉害

这期分享的是使用opencv提取**,很多时候我们需要电子版的章,所以今天就带大家使用代码

提取出来!

Photoshop虽然强大,但是奈何小编不会使啊,昨天就有一个小伙伴问我能不能帮忙,这不?PS虽

然而我不会,但是我会写代码呀!这可难不倒我!安排安排~

(特别提醒:所有爱好设计和喜欢做图的小伙伴们,切记千万不要帮着老板或者朋友PS**公

章,刑法第280条特别指出,**证件**,是可以追究刑事责任的,违法的事情不要做哦。)

教程送,源码就文末或者前文的蓝色字体自己免费拿哈——来咯!

「Opencv实战」这个**“神器”够牛节省了时间提高了效率,厉害

1)效果展示

原图——

「Opencv实战」这个**“神器”够牛节省了时间提高了效率,厉害

效果图——

「Opencv实战」这个**“神器”够牛节省了时间提高了效率,厉害

2)源码展示

import cv2import numpy as npclass Seal: def __init__(self, img_path): """ 初始化图片 :param img_path: 原始图片路径 """ self.image = cv2.imread(img_path) self.img_shape = self.image.shape self.file_name = img_path.split('.')[0].split('\\')[-1] def unify_img_size(self): """ 统一图片的大小 :return:返回一张未处理的目标图片 """ img_w = 650 if self.img_shape[1] > 600 else 400 self.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 impng def 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 == 255 print_img = np.zeros(imgpng.shape, np.uint8) print_img[:, :, :] = (255, 255, 255, 0) print_img[index1] = imgpng[index1] # (0,0,255) return print_img def 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.shape for 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 imgreal def 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 * h ars = [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()

总结

效果很不错滴,感兴趣的朋友可以试试啦~

关注小编获取更多精彩内容!记得点击传送门哈

记得三连哦! 如需打包好的源码+素材免费分享滴!!私信小编06即可啦!

「Opencv实战」这个**“神器”够牛节省了时间提高了效率,厉害

  • 发表于 2022-12-07 14:18
  • 阅读 ( 86 )
  • 分类:互联网

0 条评论

请先 登录 后评论
缅小杨
缅小杨

701 篇文章

你可能感兴趣的文章

相关问题