如何使用python将水印去除,并将整理好的章移动到合同上???
(可直接复制代码,代码带有备注)
点赞+关注
素材:
1.去水印
通常而言,可以使用形态学操作过滤掉细小的水印,但是会对章本身的结构进行破坏,根据本次使用的案例,我们可以根据二值化仅保留红色的区域。
# 生成印章
import cv2
import numpy as np
addr_photo = '3.png'
# 带水印的印章
img = cv2.imread(addr_photo,0)
# 以灰度图方式读取照片
_, thresh = cv2.threshold(img, 190, 255, cv2.THRESH_BINARY_INV)
# 仅保留红色区域
np_zero = np.zeros_like(img)
# 创建单图层
news = cv2.merge((np_zero,np_zero,thresh))
# 将照片转为三维图
cv2.imwrite('seal.png',news)
# 保存处理好的印章
生成的seal.png:
2.将印章盖到合同上
要想将印章盖到合同上,我们需要先确认印章需要盖的位置和大小,然后将印章的数据放在最前排。
import cv2
addr_photo = '1.png'
img_org = cv2.imread(addr_photo)
# 读取合同
shape_org = img_org.shape[:2]
# 记录合同原本的大小
camp = cv2.resize(img_org, (0, 0), fx = 4,fy=4)
# 将合同进行扩大,便于后期操作
size_camp = 900
# 设置印章的大小
addr_photo = 'seal.png'
img_seal = cv2.imread(addr_photo)
img_seal = cv2.resize(img_seal,(size_camp,size_camp))
# 读取印章,并更改为设置好的印章大小
mask = camp[2700:2700+size_camp,2000:2000+size_camp]
# 选定印章位置
red_split = img_seal[:,:,2]
# 获取红色图层的印章(单)
for idx in range(size_camp):
for col in range(size_camp):
# 遍历印章图层
if red_split[idx,col]>0:
# 若印章图层有数据
mask[idx,col] = [0,0,240]
# 则将选定区域的数据替换为红色(颜色可调)
camp[2700:2700+size_camp,2000:2000+size_camp] = mask
# 将修改后的印章位置替换到原合同上
cv2.imwrite('camp.png',camp)
# 保存合同
修改后合同: