python - 为什么 inpaint 方法不能从 IC 图像中删除文本?
问题描述
我试图掩盖 IC 上的标记,但inpaint
OpenCV 的方法无法正常工作。
左图是原始图像(裁剪 ROI 后)。中间的图像是我通过阈值生成的掩码。右图是修复方法的结果。
这就是我所做的:
mask = cv2.threshold(img, 120, 255, cv2.THRESH_BINARY)[1]
dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_NS)
我玩弄了修复方法的第三个参数,但它没有任何好处。
我在这里看到一个问题,有人使用了完全相同的方法,而且他的图像也很暗,对比度不是那么明显。我还尝试了修复算法 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()
而且,这将是输出:
希望有帮助!
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
Matplotlib: 3.2.0rc3
OpenCV: 4.2.0
----------------------------------------
推荐阅读
- python - 在 sympy 中将有理数写为函数
- python - 如何知道所有指向模型的 django 反向查找
- ios - UNITY 2019.3.3 WebGL(wasm)在IOS上的可执行内存不足
- excel - 我正在尝试制作可切换选项卡,但在编译 vba 期间出现错误
- reactjs - 如何在本机反应中显示文本框以在文本框中显示 HTML 内容,如文本?
- python - 为什么这不对列表进行排序?
- angular - 不带复选框但列表元素突出显示的材料选择列表 - 查找示例
- reactjs - 反应更新状态显示其他组件
- ios - FScalendar 自定义
- c# - 当我使用 ToListAsync 方法时线程不起作用