我在Ubuntu,python 2.7。与OpenCV一起工作。
我试图准确地理解函数cv2. 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。
我的问题是:为什么我只得到一个组件?
发布于 2017-04-21 16:26:52
这是因为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)结果:
19https://stackoverflow.com/questions/43547540
复制相似问题