小编Tom*_*Tom的帖子

使用OpenCV删除孤立的像素

我正在寻找一种使用OpenCV从二进制图像中删除孤立的白色像素的方法。一个类似的问题(OpenCV摆脱了孤立的像素)也有很多“答案”,但似乎没有一个对我有用。我也尝试过打开和关闭的各种组合,但都没有成功。

这里的文章:

https://homepages.inf.ed.ac.uk/rbf/HIPR2/hitmiss.htm

建议我可以完全出于此目的使用“命中或失败”操作:

结构元素

1用于定位二进制图像中的孤立点

这就是为什么0的解释与直接与侵蚀/膨胀配合使用时的解释不同(其中0解释为“不在乎”而不是“不是白色”,这基本上就是我所追求的)。但是,使用此内核仅渲染原始图像。

我的输入图像是这样的:

计算输入图像

您会注意到,在图像的左侧附近有一些白色像素,我想将其消除。

这是代码:

kernel = np.array([ [0, 0, 0],
                    [0, 1, 0],
                    [0, 0, 0]],np.uint8)

hitormiss = cv2.morphologyEx(input_image, cv2.MORPH_HITMISS, kernel)

cv2.imshow('hitormiss', hitormiss)
Run Code Online (Sandbox Code Playgroud)

删除像这样的孤立像素的正确方法是什么?

更新:亚历山大的答案就像一个魅力,是最快的解决方案。另一个答案也提供了一个解决方案,即使用cv2.connectedComponents函数,但是它占用大量处理器资源。这是使用此方法的函数:

def remove_isolated_pixels(self, image):
    connectivity = 8

    output = cv2.connectedComponentsWithStats(image, connectivity, cv2.CV_32S)

    num_stats = output[0]
    labels = output[1]
    stats = output[2]

    new_image = image.copy()

    for label in range(num_stats):
        if stats[label,cv2.CC_STAT_AREA] == 1:
            new_image[labels == label] = 0

    return new_image
Run Code Online (Sandbox Code Playgroud)

python opencv computer-vision

3
推荐指数
1
解决办法
6261
查看次数

标签 统计

computer-vision ×1

opencv ×1

python ×1