我使用的是 Ubuntu,python 2.7。使用 OpenCV。
我试图准确理解函数 cv2.connectedComponents 正在做什么。
这是图像:
![enter image description here](https://i.stack.imgur.com/75oB8.png)
代码:
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()
功能。
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)
RESULT:
19
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)