在python中使用opencv去除水印

qgelzfjb  于 2023-01-09  发布在  Python
关注(0)|答案(2)|浏览(155)

我已经使用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、掩码文件以及我从代码中得到的内容
我试着中和原始水印图像,用一张白色背景的逆水印图像。
但现在毫无进展,我不知道发生了什么事。
我在谷歌上搜索了一下,找到了一些关于它的信息,但是在我的情况下,我有一个面具。我如何用我目前的代码实现它?任何帮助都是感激之情。
源代码

掩码

结果

yshpjwxd

yshpjwxd1#

好吧,我不明白你的"中和"算法:

reverse_val = 255 - src[row, col, channel]
val = 255 - reverse_val * 256 / mask[row, col, channel]

但我可以告诉你,为什么它不工作。当你读掩模图像mask = cv2.imread('mask.jpg')你读它作为普通的图像与白色背景和水印。你应该从这个做一个二进制图像,所以你会明白哪些像素你需要中和:

threshed = cv2.inRange(mask, 0, 254)

你会得到这样的结果:

所以现在你需要中和原始图像上蒙版的"白色"像素。(但是!你应该记住二值图像和灰度图像只有一个通道)。
正如我之前所说:我不明白你的"中和"算法,因为当我使用它时-我得到这样的图像:

所以我建议你把所有的像素都变成白色:

和完整代码:

import cv2
import numpy

src = cv2.imread("src.jpg")
mask = cv2.imread("mask.jpg", cv2.IMREAD_GRAYSCALE)
save = numpy.zeros(src.shape, numpy.uint8)

threshed = cv2.inRange(mask, 0, 254)

def get_reversed(values: tuple) -> tuple:
    return 255 - values[0], 255 - values[1], 255 - values[2]

def get_processed(values: tuple, mask: int) -> tuple:
    return 255 - values[0] * 256 / mask, 255 - values[1] * 256 / mask, 255 - values[2] * 256 / mask

for row in range(src.shape[0]):
    for col in range(src.shape[1]):
        if threshed[row, col] != 0:
            # save[row, col] = get_reversed(src[row, col])
            save[row, col] = (255, 255, 255)
            # reverse_val = get_reversed(src[row, col])
            # val = get_processed(reverse_val, mask[row, col])
        else:
            save[row, col] = src[row, col]

cv2.imwrite('result.jpg', save)
zfciruhq

zfciruhq2#

我用MS Paint在不到一分钟的时间内复制/粘贴。

相关问题