前言
哈喽,大家好,我是你们的栗子同学鸭~
更新了很久的爬虫内容啦,已经吸收完了没?
印章作是我们工作中和生活中会经常接触到的东西,一般用来代表某个个体或者群体,有时候
我们需要复刻一些文件,或者是作品上的印章等等情况时,就需要我们提取一些电子印章。
所有文章完整的素材+源码都在👇👇
粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。
PS——
注意注意注意:
第二百八十条 伪造、变造、买卖或者盗窃、抢夺、毁灭国家机关的公文、证件、印章的,处三
年以下有期徒刑、拘役、管制或者剥夺政治权利;情节严重的,处三年以上十年以下有期徒
刑。
伪造公司、企业、事业单位、人民团体的印章的,处三年以下有期徒刑、拘役、管制或者剥夺
政治权利。
在看正文之前,各位先看下这条刑法,不要对印章做不该做的事情啊!(重要的事情记得哈)
前几天就有一个小伙伴儿问我:
博主博主,求教一下,老板给我一个工作,说做完就可以下班了——合同上的电子印章让我给
用PS提取下来,奈何PS没学好,搞了一个小时都没搞明白,急死了都......
小编当场回答,说PS我也不会,没办法啊......but我会Python啊,让小伙伴儿等等,给我10分
钟时间,保证然他下班!
但对于ps基础不好的朋友,不会环绕输入文字,不会保存透明格式图片,不会对齐怎么办??
想要给提取一些印章?会ps但是嫌ps制作流程太麻烦?弄个弄东西花半天时间得不偿失!
那就来看看这款印章提取器吧,今天小编教大家一键提取神器。
正文
1)运行环境
环境安装:python 3.8: 解释器、pycharm: 代码编辑器、opencv、numpy、部
分自带的模块 直接安装Python就可以使用了。
相对应的安装包/安装教程/激活码/使用教程/学习资料/工具插件 可以直接找我厚台获取 。 2)模块安装
第三方库的安装方式如下: 一般安装:pip install +模块名
镜像源安装:pip install -i https://pypi.douban.com/simple/+模块名
(还有很多国内镜像源,这里是豆瓣的用习惯 了,其他镜像源可以去看下之前文章都有的)
模块安装问题可以详细的找我给大家讲一下的哈,之前其实也有的文章写了几个点的。
2)代码展示
import cv2
import numpy as np
class 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()
3)效果展示
第一组
原图——
效果图——
第二组
总结
如果看完有收获,别忘了转发给你身边的小伙伴分享哦!如果有什么意见或建议,也欢迎在文
末下方点击留言!大家的支持是我永远的动力,我们下期再见!需要代码的还是文末找我拿
哈!
✨完整的素材源码等:可以滴滴我吖!或者点击文末hao自取免费拿的哈~
🔨推荐往期文章——
项目0.9 【Python实战】WIFI密码小工具,甩万能钥匙十条街,WIFI任意连哦~(附源码)
项目1.0 【Python实战】再分享一款商品秒杀小工具,我已经把压箱底的宝贝拿出来啦~
项目0.7 【Python爬虫实战】 不生产小说,只做网站的搬运工,太牛逼了~(附源码)
项目0.8 【Python抢票神器】火车票枪票软件到底靠谱吗?实测—终极攻略。
🎁文章汇总——
Python文章合集 | (入门到实战、游戏、Turtle、案例等)
(文章汇总还有更多你案例等你来学习啦~源码找我即可免费!)文章来源:https://www.toymoban.com/news/detail-407978.html
文章来源地址https://www.toymoban.com/news/detail-407978.html
到了这里,关于【Opencv实战】Python神器 | ps做印章太麻烦?无法拒绝的提取印章神技能,很多人都不知道~(附源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!