• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于python:利用Python去除图片水印有手就行

python 搞代码 4年前 (2022-02-20) 30次浏览 已收录 0个评论

人生苦短,我学Python
有同学问,既然Python这么牛逼,可不可应用Python去除图片水印的办法呢?

这个必定有啊,不过因为图片水印的品种有很多,明天咱们先讲最简略的一种。


即上图中的①类水印,这种水印存在红色背景上的文档里,水印是灰色,须要保留的文字是彩色。

这种通常能够进行简略的亮度/对比度转换,直到水印隐没并升高亮度以进行弥补[1]。参考他人的办法,我发现能够用多种办法去除水印。大抵原理比拟类似,上面先讲OpenCV的办法。

OpenCV + Numpy

本办法须要应用的库:cv2、numpy。cv2是基于OpenCV的图像处理库,能够对图像进行侵蚀,收缩等操作;Numpy这是一个弱小的解决矩阵和维度运算的库。

函数简介

介绍一下cv2的三个根本函数:应用cv2.imread(),cv2.imshow(),cv2.imwrite()别离能够读取、显示和保留图像。

img=cv2.imread(‘test.png’)cv2.imshow(‘test.png’,img)cv2.waitKey(0)cv2.imwrite(‘test_2.png’, img)

对于Numpy呢,则要用到np.clip(),它是一个截取函数,用于截取数组中小于或者大于某值的局部,并使得被截取局部等于固定值。

np.clip(a, a_min, a_max, out=None):

具体用法:


能够看到,数组x中的所有数限定到范畴0和5之间。为啥要介绍这些函数呢,接着往下看。

色调转换

回到本文一开始,咱们想去除文档图片中的水印。


上图中我选取了三个点,这三个像素点别离对应背景红色、彩色字体以及灰色的水印。

咱们当初要做的事,就是想方法把水印转换成红色背景。换言之,就是把图片中[217,217,217]的像素点转换成[255,255,255]。

当然这个[217,217,217]也不是固定的,只是一个范畴。为了不便调整,我选取了一些像素点,做了一个线性回归。

心愿把图片整体的像素色彩做一个扭转,原有彩色字体尽量跟原来统一,而水印局部则肯定要≥255,而后就能够通过np.clip()限定区间,使之都变成[255,255,255]。


说干就干

import cv2import numpy as npimg = cv2.imread(‘test.png’)new = np.clip(1.4057577998008846*img-38.33089999653017, 0, 255).astype(np.uint8)cv2.imwrite(‘removed.png’, new)

上面咱们看看调整后的成果(左侧是转换前,右侧是转换后)。


左:转换前 右:转换后

解决成果还是不错的,阐明对于这类文档图片水印,通过几行Python代码就能够轻松去除水印。
不过通过线性回归扭转整体图片色彩,也会影响原有的彩色文本,导致其色彩产生了微微变动。
那咱们能不能简略粗犷一点!只扭转水印的色彩呢?
也能够试试。

PIL + itertools

PIL也是一个Python 图像处理库,其中Image模块是在Python PIL图像处理中常见的模块,对图像进行根底操作的性能根本都蕴含于此模块内。

itertools之前更是被咱们称为一个 零差评的 Python 内置库。其中itertools.product用来产生多个列表和迭代器的(积)。

还是跟之前一个原理,咱们心愿将图片中[217,217,217]的像素点转换成[255,255,255]。

那就简略粗犷一点,也就是像素值相加大略600(217+217+217)以上的像素点,都改成[255,255,255]就好了。

from itertools import productfrom PIL import Imageimg = Image.open(‘test.png’)width, height = img.sizefor pos in product(range(width), range(height)): if sum(img.getpixel(pos)[:3]) > 600: img.putpixel(pos, (255,255,255))img.save(‘removed_1.png’)

运行后果,比照一下。


左:转换前 右:转换后

与第一种办法比照,肉眼也没看进去太显著差异。

那大家就喜爱那种办法就用哪个吧!

咱们的文章到此就完结啦,如果你对去水印有趣味,能够入手实战一下,代码敲一下,会有更粗浅的体验。喜爱明天的Python 实战教程,请继续关注我,有问题也能够打在评论区


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于python:利用Python去除图片水印有手就行

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址