OpenCV修复方法不会从IC图像中删除文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV修复方法不会从IC图像中删除文本相关的知识,希望对你有一定的参考价值。

我正在尝试掩盖IC上的标记,但是openCV中的inpaint方法无法正常工作。

inpainting dies

[左图像是原始图像(裁剪ROI后)。中间的图像是我通过脱阈生成的蒙版。正确的图像是修复方法的结果。

这是我做的:

mask = cv2.threshold(img, 120, 255, cv2.THRESH_BINARY)[1]
dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_NS)

我玩过Inpainting方法的第三个参数,但是它没有任何用处。我在这里看到一个问题,有人使用完全相同的方法,而他的图像也很暗,对比度没有那么明显。我还尝试了修复算法Telea和NS。这是什么问题?

答案

主要是扩大用于修复的mask。另外,增大修复半径将获得更好的效果。

这是我的建议:

import cv2
from matplotlib import pyplot as plt

# Read image
img = cv2.imread('ic.png', cv2.IMREAD_GRAYSCALE)

# Binary threshold image
mask = cv2.threshold(img, 120, 255, cv2.THRESH_BINARY)[1]

# Remove small noise
inp_mask = cv2.morphologyEx(mask,
                            cv2.MORPH_OPEN,
                            cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)))

# Dilate mask
inp_mask = cv2.dilate(inp_mask,
                      cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (15, 15)))

# Inpaint
dst = cv2.inpaint(img, inp_mask, 15, cv2.INPAINT_NS)

# Show results
plt.figure(1, figsize=(10, 10))
plt.subplot(2, 2, 1), plt.imshow(img, cmap='gray'), plt.title('Original image')
plt.subplot(2, 2, 2), plt.imshow(mask, cmap='gray'), plt.title('Thresholded image')
plt.subplot(2, 2, 3), plt.imshow(inp_mask, cmap='gray'), plt.title('Inpaint mask')
plt.subplot(2, 2, 4), plt.imshow(dst, cmap='gray'), plt.title('Inpainted image')
plt.tight_layout()
plt.show()

而且,那将是输出:

Outputs

希望有帮助!

----------------------------------------
System information
----------------------------------------
Platform:    Windows-10-10.0.16299-SP0
Python:      3.8.1
Matplotlib:  3.2.0rc3
OpenCV:      4.2.0
----------------------------------------

以上是关于OpenCV修复方法不会从IC图像中删除文本的主要内容,如果未能解决你的问题,请参考以下文章

[OpenCV实战]34 使用OpenCV进行图像修复

使用 OpenCV 的图像处理从图像中删除背景文本和噪声

Python,OpenCV中的图像修复——cv2.inpaint()

OpenCV探索之路:图像修复技术

用于 OCR 的 Python OpenCV 偏斜校正

OpenCV 完整例程83. 频率域低通滤波:印刷文本字符修复