Image 如何从图像中删除点状水印?
我想用OCR自动将传真文件输入系统。我尝试使用tesseract,但我发现不包含水印的部分可以很好地识别,但带水印的部分几乎无法识别 我想使用图像处理删除水印。通常,此图像的水印由1x1个黑色像素组成 有没有办法去掉这个水印 示例文档(隐藏的敏感个人信息): 水印(由1x1像素组成):Image 如何从图像中删除点状水印?,image,opencv,image-processing,Image,Opencv,Image Processing,我想用OCR自动将传真文件输入系统。我尝试使用tesseract,但我发现不包含水印的部分可以很好地识别,但带水印的部分几乎无法识别 我想使用图像处理删除水印。通常,此图像的水印由1x1个黑色像素组成 有没有办法去掉这个水印 示例文档(隐藏的敏感个人信息): 水印(由1x1像素组成): 编辑:另一个标记为复制的答案只是一个灰显的水印,但我要处理的图像是一个二值图像,因此图像和水印的颜色是黑色的。因此,它不能以相同的方式处理,似乎必须以不同的方式处理。您可以使用形态学操作 仅在带有水印的RO
编辑:另一个标记为复制的答案只是一个灰显的水印,但我要处理的图像是一个二值图像,因此图像和水印的颜色是黑色的。因此,它不能以相同的方式处理,似乎必须以不同的方式处理。您可以使用形态学操作 仅在带有水印的ROI上使用闭合 以下是一个MATLAB代码示例:
I=rgb2gray(imread('kmyxE.png');%读取图像并将其转换为灰度。
J=I;
%核大小为3x3的形态闭合(仅适用于带有水印的区域)。
J(720:1450480:1260)=imclose(I(720:1450480:1260),一(3));
我很高兴使用OpenCV实现它
结果:以下解决方案可能更好:
I=rgb2gray(imread('kmyxE.png');
J1=I;
J2=I;
%内核大小为1x3的形态闭合(仅适用于带有水印的区域)。
J1(720:1450480:1260)=imclose(I(720:1450480:1260),一(1,3));
%核大小为3x1的形态闭合
J2(720:1450480:1260)=imclose(I(720:1450480:1260),一(3,1));
%保持J1和J2的最小值
J=最小值(J1,J2);
结果:由于删除文本数据时OCR无法正常工作,因此我对文本进行了处理,使其不会被删除,而不是留下一些水印。我最终使用了两个嵌套for循环 结果: 代码:
你可能会注意到交叉核形状的膨胀操作。
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