cv2.connectedComponents未检测到组件

发布于 2021-01-29 16:07:31

我在Ubuntu python 2.7上。使用OpenCV。

我试图确切地了解cv2.connectedComponents函数的功能。这是图像:

在此处输入图片说明

编码:

import cv2
import numpy as np

img = cv2.imread('BN.tif', 0)

img = np.uint8(img)
_, markers = cv2.connectedComponents(img)

据我了解,此功能创建的数组大小与提供的图像相同。对于检测到的每个组件,为该组件的所有(y,x)位置分配相同的编号。如果背景全部为“ 0”,则圆圈将全部为“
1”,下一个正方形均为“ 2”,依此类推。最后一个成分应全部为“ 19”。我通过获取定义组件的最高编号来读取组件的数量:

np.amax(markers)

我应该得到19,但我得到1。

我的问题:为什么我只得到1个成分?

关注者
0
被浏览
347
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是因为cv2.connectedComponents()仅将白色部分视为分量。因此,您将获得一个组件。

    您必须反转图像。您可以通过使用cv2.bitwise_not()函数来实现。

    码:

    import cv2
    import numpy as np
    
    img = cv2.imread('cc.png', 0)
    ret, thresh = cv2.threshold(img, 127, 255, 0)
    
    #---- Inverting the image here ----
    img = cv2.bitwise_not(thresh)     
    _, markers = cv2.connectedComponents(img)
    print np.amax(markers)
    

    结果:

    19
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看