cv2.connectedComponents 无法正常工作
cv2.connectedComponents doesn't work properly
我想使用函数 cv2.connectedComponents 连接二进制图像上的组件,如下所示...
.
一切正常,除了输出的标签数组。根据已识别的组件,在此数组中只有零而不是序列号。
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]]
对我有用:
并且你应该注意函数只找到非零的组件。在源图像中,组件是边缘。并且返回的是与源大小相同的标记图像。
的输出
[[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)。
我想使用函数 cv2.connectedComponents 连接二进制图像上的组件,如下所示...
一切正常,除了输出的标签数组。根据已识别的组件,在此数组中只有零而不是序列号。
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]]
对我有用:
并且你应该注意函数只找到非零的组件。在源图像中,组件是边缘。并且返回的是与源大小相同的标记图像。
的输出[[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)。