cv2.connectedComponents未检测到组件

时间:2017-04-21 16:18:00

标签: opencv

我在Ubuntu上,python 2.7。使用OpenCV。

我试图准确理解cv2.connectedComponents正在做什么。 这是图像:

enter image description here

代码:

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 :(得分:8)

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

你必须反转你的形象。您可以使用cv2.bitwise_not()函数来执行此操作。

CODE:

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