我在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.
我的问题:为什么我只得到一个组件?
答案 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