如何使用 OpenCV 去除此图像的黑点?

Posted

技术标签:

【中文标题】如何使用 OpenCV 去除此图像的黑点?【英文标题】:How to remove black dots of this image using OpenCV? 【发布时间】:2021-11-23 22:47:53 【问题描述】:

是否可以使用 OpenCV 在不妨碍图像文本的情况下去除这些黑点?

到目前为止,我已经尝试过扩张、形态学、腐蚀等。

【问题讨论】:

我会为此使用关闭区域,但 OpenCV 似乎没有它的实现。 area closing 在以下答案之一中得到了证明。它建立在connectedComponentsWithStats 之上。我确信 skimage 可以使用。 【参考方案1】:

也许尝试将字母连接到大斑点,并删除小斑点:

img = (cv2.imread(r"your_image.png",cv2.IMREAD_UNCHANGED)==0).astype(np.uint8)

mask=cv2.morphologyEx(img,cv2.MORPH_CLOSE,np.ones((20,40))) # this will connect letters together
out = cv2.connectedComponentsWithStats(mask, 4, cv2.CV_32S) # count pixel in each blob
bad = out[2][:,cv2.CC_STAT_AREA]<2000 %remove small blobs
mask = np.zeros_like(img,dtype=np.uint8)
for i in range(1,out[0]):
    if not bad[i]:
        mask[out[1] == i] = 1
img_clean = img & mask
plt.imshow(1-img_clean,interpolation="none",cmap='gray')

它并不完美,但它是一个开始,希望它有所帮助。

【讨论】:

我建议使用# 而不是% 来引入cmets。此外,-1 到 imread 似乎很神奇。改用来自cv2.IMREAD_... 的命名常量。 好主意,但 -1 表示幻数和无效语法。

以上是关于如何使用 OpenCV 去除此图像的黑点?的主要内容,如果未能解决你的问题,请参考以下文章

如何去除opencv中的二值图像噪声?

opencv 如何去除最外边框

使用openCV去除二值图像中的噪声

如何使用opencv删除图像中的船尾迹?

如何去除图像上的卷线

新手求助,如何用OpenCV去除小块的分散区域