首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从图像中抹去点状水印?

如何从图像中抹去点状水印?
EN

Stack Overflow用户
提问于 2019-06-01 06:48:18
回答 2查看 446关注 0票数 2

我想用OCR自动将传真文件输入到系统中。我试着使用tesseract,但是我发现不包含水印的部分被识别得很好,但是有水印的部分几乎是无法识别的。

我想用图像处理来去除水印。不同寻常的是,该图像的水印由1x1黑色像素组成。

有办法去除这个水印吗?

示例文档(隐藏敏感的个人信息):

水印(由1x1像素组成):

编辑:另一个被标记为复制的答案是一个简单的灰度水印,但是我要处理的图像是一个二值图像,所以图像和水印的颜色是黑色的。因此,它不能以同样的方式处理,而且似乎必须以另一种方式处理。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-01 08:49:57

由于在删除文本数据时,OCR没有正常工作,所以我处理了文本,使其不被删除,而不是留下几个水印。最后我使用了两个嵌套的for循环。

结果:

代码:

代码语言:javascript
复制
img = cv2.imread('masked.png')
img_bw = 255*(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) > 5).astype('uint8')
img_copy = np.copy(img_bw)

for x in range(1, 2146):
    for y in range(1, 1727):
        if img_bw[x][y] == 0 and \
                img_bw[x-1][y] == img_bw[x+1][y] == img_bw[x][y-1] == img_bw[x][y+1] == \
                img_bw[x-1][y-1] == img_bw[x-1][y+1] == img_bw[x+1][y-1] == img_bw[x+1][y+1] == 255:
            img_copy[x][y] = 255
票数 0
EN

Stack Overflow用户

发布于 2019-06-01 08:31:14

您可以使用形态正在关闭操作。

只在ROI上使用带有水印的闭包。

下面是MATLAB代码示例:

代码语言:javascript
复制
I = rgb2gray(imread('kmyxE.png')); %Read the image and convert it to Grayscale.
J = I;

%Morphological closing with kernel size 3x3 (applyied only the area with the watermark).
J(720:1450, 480:1260) = imclose(I(720:1450, 480:1260), ones(3));

我给您留下了使用OpenCV实现它的乐趣。

结果:

以下解决办法可能更好:

  1. 使用内核1x3在X方向关闭
  2. 使用内核3x1在Y方向关闭
  3. 取这两个图像的最小值。
代码语言:javascript
复制
I = rgb2gray(imread('kmyxE.png'));
J1 = I;
J2 = I;

%Morphological closing with kernel size 1x3 (applyied only the area with the watermark).
J1(720:1450, 480:1260) = imclose(I(720:1450, 480:1260), ones(1, 3));

%Morphological closing with kernel size 3x1
J2(720:1450, 480:1260) = imclose(I(720:1450, 480:1260), ones(3, 1));

%Keep the minimum of J1 and J2
J = min(J1, J2);

结果:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56404497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档