python去除图片水印的实践

python去除图片水印的实践

简单!Python+OpenCV三步去除水印

作为一个不会用PS的我,每当在工作中遇到一些要去除水印的图片,我只能通过手机或者PPT(没错,PPT的删除背景功能真的很强大)。如此以往,我觉得生活不能再这么继续下去,ok!编个代码吧!

Step 1 思路要清楚

还是用把大象装进冰箱的思路,简单的捋一捋去除水印的步骤

  • 识别出水印
  • 哼哼哈兮(例如腐蚀,膨胀等一些不知道原理也不影响的东西)的处理
  • 还原图片

简略的分析一下之后就可以开工了,后面会详细说怎么处理的

Step 2 准备库

这次的库比较简单一个cv2和一个numpy
cv2可以对图像进行腐蚀,膨胀等操作,用来做一个人脸识别也是没问题的
numpy是用来处理大数据的,然而这里主要运用它处理矩阵的能力,因为图片在计算机里都是以矩阵形式存在的

  • import cv2    #基于OpenCV的图像处理库
  • import numpy   #这是一个强大的处理矩阵和维度运算的库

Step 3 编代码了鸭

因为这次代码比较简单我先直接粘成品

import cv2
import numpy as np
path = "路径.格式"   #记得不要有中文路径

img = cv2.imread(path)
height,width = img.shape[0:2]
#开始操作
thresh = cv2.inRange( img,np.array([0,0,0]),np.array([192,192,192]) )
scan = np.ones( (3,3),np.uint8)
cor = cv2.dilate(thresh,scan,iterations=1)
specular = cv2.inpaint(img,cor,5,flags=cv2.INPAINT_TELEA)
#操作结束,下面开始是输出图片的代码
cv2.namedWindow("image",0)
cv2.resizedWindow("image",int(width/2),int(height/2))
cv2.imshow("image",img)

cv2.namedWindow("modified",0)
cv2.resizeWindow("modified",int(width/2),int(height/2))
cv2.imshow("modified",specular)

cv2.waitKey(0)
cv2.destroyAllWindows()

#代码纯手打,如果run不出优先检查错别字

 

ok我们开始逐步分析
这是我要去除水印的图片,为了增加点难度,我在原图中间还乱涂乱画了
python去除图片水印的实践

  1. 提取出水印

这个是通过inRange函数搞定的,这个是个二值化的操作。简单来说,在后面的参数输入一段颜色范围,符合的填1,不符合的填0
如果只运行

thresh = cv2.inRange( img,np.array([0,0,0]),np.array([192,192,192]) )

 

后面的(0,0,0)-(192,192,192)是灰色的RGB取值范围
附上一部分RGB颜色区域

python去除图片水印的实践
python去除图片水印的实践

效果如图

python去除图片水印的实践

我们不难看出很大一部分的水印都被提取出来了,然后就很愉快呢

  1. 腐蚀

这里我们开始腐蚀特征,这样可以让图片看上去更加贴切和吻合
在上一步的基础上运行

scan = np.ones( (3,3),np.uint8)
cor = cv2.dilate(thresh,scan,iterations=1)

 

效果如图

python去除图片水印的实践
嗯,没啥差别。因为我们腐蚀步骤就1(iterations=1)大家有兴趣可以加数字,效果会更加明显

  1. 还原

最后通过inpaint函数了,这个函数就厉害了,大家自己百度吧。我一句两句说不清楚
通过inpaint我们就能得到去除水印的图啦
python去除图片水印的实践

好的,今天的教学到此为止。
对python有兴趣的可以

https://blog.csdn.net/Maximun/article/details/85064274