cv2.connectedComponents未检测到组件
我在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个成分?
-
这是因为
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