乐趣区

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

人生苦短,我学 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 实战教程,请继续关注我,有问题也能够打在评论区

退出移动版