如何去除图片水印?探索多种方法

如今市面上有很多去除水印的工具,但大部分都需要付费。作为资深的“白嫖党”,我不太愿意花钱。因此,我进行了一番研究,发现现在的“去水印”基本上都采用了相似的思路:利用图像修复算法,将有水印的地方视为图像损坏的地方,然后用相邻像素替换这些损坏的地方。

以下是一些开源工具可以用来去除图片上的水印。

1. openCV 图像修复

openCV中提供了图像修复的方法,分别基于2004年由Alexandru Telea撰写的“基于快速行进方法的图像修复技术”和Bertalmio,Marcelo,Andrea L. Bertozzi和Guillermo Sapiro在2001年的论文“Navier-Stokes,流体动力学和图像和视频修补”实现的两种算法。调用cv.inpaint方法时,前者用cv.INPAINT_TELEA标记后者用cv.INPAINT_NS。openCV修复图像的方法使用起来很简单,只需要几行代码:

第一张图像是原图,第二个图像是mask(掩模),第三个图像是第一个算法的结果,最后一个图像是第二个算法的结果。

对于轻微损坏或只有很少一两个水印的图片,这种方法还是可以的。但是,对于满屏水印的图片,该怎么办呢?

2. mask图像怎么创建

用openCV去除上面这样图片的水印,首先要面临的问题是mask图片怎么办?

根据一位网友的回答,创建掩模图像是图像修复过程中的一个重要步骤。掩模图像用于指示原始图像中需要修复的区域。以下是创建掩模图像的基本步骤:

再看效果:

这效果,真是一言难尽,你说它没去吧,它的确没有水印了;你说它去了吧,这还不如不去…

什么原因呢?难道是因为我涂鸦涂得不好?需要更精确?我想过一个鸡贼的办法:往这网站上传一个纯黑的图片,它加了水印我直接下载下来当mask,但这有点冒险…

于是,让我再展示一下真正的技术:

再看效果:

这玩意,不能说跟原图一模一样,那也的确是没啥差别。我觉得这不是mask文件的问题,mask文件太精确不是好事,应该还是修复算法的问题。

3. 机器学习修复算法

既然是算法不行,那,有没有更好的修复算法呢?有,就是使用卷积神经网络(CNN)来提取图像的特征,如边缘、纹理、颜色等信息然后修复。现成的也有:
https://github.com/braindotai/Watermark-Removal-Pytorch
https://github.com/zuruoke/watermark-removal

遗憾的是:这两个,无论用哪一个,你都逃不掉创建mask。为什么不能通过机器学习自己识别水印创建mask呢?Watermark-Removal-Pytorch项目的README中也给出了解释:

总的来说:做水印识别代价太大,而且效果不好。

声明:文中的水印图片来自互联网,我仅拿来做学习交流的。如果侵权了,可以联系我,我先给您磕一个,然后马上删掉。

参考:
https://apachecn.github.io/opencv-doc-zh/#/docs/4.0.0/9.2-tutorial_py_inpainting
https://github.com/zuruoke/watermark-removal
https://github.com/braindotai/Watermark-Removal-Pytorch
https://github.com/Sanster/IOPaint
https://www.iopaint.com/

-------------------------------

原文: https://wangxuan.me/tech/2024/06/04/watermark-removal.html

标签:游戏攻略