我已经使用OpenCV和Python使用下面的代码从图像中删除水印。
import cv2
import numpy
src = cv2.imread('src.jpg')
mask = cv2.imread('mask.jpg')
save = numpy.zeros(src.shape, numpy.uint8)
for row in range(src.shape[0]):
for col in range(src.shape[1]):
for channel in range(src.shape[2]):
if mask[row, col, channel] == 0:
val = 0
else:
reverse_val = 255 - src[row, col, channel]
val = 255 - reverse_val * 256 / mask[row, col, channel]
if val < 0: val = 0
save[row, col, channel] = val
cv2.imwrite('result.jpg', save)
下面是src、掩码文件以及我从代码中得到的内容
我试着中和原始水印图像,用一张白色背景的逆水印图像。
但现在毫无进展,我不知道发生了什么事。
我在谷歌上搜索了一下,找到了一些关于它的信息,但是在我的情况下,我有一个面具。我如何用我目前的代码实现它?任何帮助都是感激之情。
源代码
掩码
结果
2条答案
按热度按时间yshpjwxd1#
好吧,我不明白你的"中和"算法:
但我可以告诉你,为什么它不工作。当你读掩模图像
mask = cv2.imread('mask.jpg')
你读它作为普通的图像与白色背景和水印。你应该从这个做一个二进制图像,所以你会明白哪些像素你需要中和:你会得到这样的结果:
所以现在你需要中和原始图像上蒙版的"白色"像素。(但是!你应该记住二值图像和灰度图像只有一个通道)。
正如我之前所说:我不明白你的"中和"算法,因为当我使用它时-我得到这样的图像:
所以我建议你把所有的像素都变成白色:
和完整代码:
zfciruhq2#
我用MS Paint在不到一分钟的时间内复制/粘贴。