cv2.connectedComponents无法正常工作

时间:2018-01-16 11:37:15

标签: python opencv image-processing connected-components

我想使用函数 cv2.connectedComponents 来连接二进制图像上的组件,如下所示......

image

除输出的标签数组外,一切正常。根据所识别的组件,在该阵列中仅显示零而不是所示的序列号。

import cv2
import numpy as np

img = cv2.imread('eGaIy.jpg', 0)
img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1]  # ensure binary
ret, labels = cv2.connectedComponents(img)

# Map component labels to hue val
label_hue = np.uint8(179*labels/np.max(labels))
blank_ch = 255*np.ones_like(label_hue)
labeled_img = cv2.merge([label_hue, blank_ch, blank_ch])

# cvt to BGR for display
labeled_img = cv2.cvtColor(labeled_img, cv2.COLOR_HSV2BGR)

# set bg label to black
labeled_img[label_hue==0] = 0

cv2.imshow('labeled.png', labeled_img)
cv2.waitKey()

输出标签 - > labels.shape:(256L,250L)

[[0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 ..., 
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]]

1 个答案:

答案 0 :(得分:2)

它对我有用:

enter image description here enter image description here

你应该小心,该函数只能找到非零的组件。在源图像中,组件是边缘。并且返回的标记图像为相同大小的源。

的输出
[[0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 ..., 
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]
 [0 0 0 ..., 0 0 0]]

仅表示4个角区域(3x3)全部为零,但它并不意味着所有元素都为零。

如果您在致电cv2.connectedComponents

后拨打此电话
print(set(labels.reshape(-1).tolist()))

你会得到:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}

这意味着存在14个组件(边缘)和1个背景(0)。