批量去水印是个邪恶的技术,以老赵的衣橱为例子就更邪恶了。之所以以衣橱为例子而不以时尚网为例子,是标题需要。实际上,时尚网的水印批量去除效果更佳。闲话少说,摆原理,上图片(代码就不上了)。
======================================
通过观察可以发现,如果以图片的右下角为基准,很多网站图片的水印位置是固定的,因此,可以通过以下步骤去除:
第一步:制定一张mask图片,这张图片标记了水印的位置。
mask图片可以用photoshop或其它工具做。我最初的想法是让程序智能提取,输入两张带有水印的图片,根据水印区域相似性来找到水印区。这个思路实现起来比较难,试了几个方法,都不理想。还是用photoshop扣掉非水印区域省心。
下面是我做的“衣橱”的mask图片,其中非白色的像素便是水印区:
第二步:对于要去水印的图片,根据mask图片,通过程序抠掉其中的水印区域。这一步可以省略,抠不抠都不影响最终结果。放在这里是为了把原理讲的更清晰些。经过第二步,我们得到了一张局部残缺的图片。
第三步:图片复原。图片复原是一种图像处理技术,英文叫Image Inpainting。原理很复杂,网上的论文大把抓,有兴趣的可以去看看。
我用的是OpenCV的图像复原函数。先看看OpenCV图像复原的演示,对这个技术有个直观认识。这是一张残缺的照片:
复原后的照片:
效果很棒。:P
我按上面思路写了一个 demo,拿老赵的衣橱做实验,结果如下:
换张图片试试:
再换张:
水印去掉了,复原后的图片,仔细看,还能看出痕迹。mask模板再制作精良点,选择更好的算法估计效果会好一些。