在使用形态学细化后,如何删除图像中的小组件?

2024-09-28 16:22:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用形态细化,输出有一些噪音。我在用python。第一个图像是原始图像。你知道吗

Original image

这是我尝试细化的代码(部分取自OpenCV Python Tutorials):

from skimage import morphology
import cv2
import numpy as np

img = cv2.imread('m.png',0);

size = np.size(img)
skel = np.zeros(img.shape, np.uint8)

ret, img = cv2.threshold(img, 220, 255, cv2.THRESH_BINARY_INV);
element = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))
done = False

while (not done):
    eroded = cv2.erode(img, element)
    temp = cv2.dilate(eroded, element)
    temp = cv2.subtract(img, temp)
    skel = cv2.bitwise_or(skel, temp)
    img = eroded.copy()

    zeros = size - cv2.countNonZero(img)
    if zeros == size:
        done = True

'cleaned = morphology.remove_small_objects(skel, min_size=64, connectivity=2) I tried to use this function to remove the noise but it gave the same output'

这是输出图像。你知道吗

Output

这就是我把结构元素改为:

element = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))

MORPH_RECT

期望的输出是得到一个没有任何噪声的细化图像。谁能帮我去掉这些小点(噪音)吗?你知道吗

Desired output


Tags: 图像importimgsizenpzeroselementcv2
1条回答
网友
1楼 · 发布于 2024-09-28 16:22:25

应用一个高斯滤波器应该可以做到这一点。你知道吗

cv2.GaussianBlur(img,(5,5),0)

DocumentationTheory + Examples

除了过滤,您还可以使用打开操作:

opening = cv.morphologyEx(img, cv.MORPH_OPEN, kernel)

Documentation见第3点


我的结果:证明它是有效的 resulting picture

它也会从输入图像中带走一些东西,但这是因为分辨率很小。可以进一步调整参数。你知道吗

kernel = np.ones((2,1),np.uint8)
skel = cv2.morphologyEx(skel, cv2.MORPH_OPEN, kernel)
cv2.imwrite('end_product.png',skel)

相关问题 更多 >