如何用open cv在python中实现连通分量标注? 这是一个图像示例:
我需要连接组件标记来分隔黑白图像上的对象。
最佳答案
OpenCV 3.0 docs for connectedComponents()
别提 Python 但它确实实现了。参见例如this SO question .在 OpenCV 3.4.0 及更高版本上,文档确实包含 Python 签名,如 current master docs 中所示。 .
函数调用很简单:num_labels, labels_im = cv2.connectedComponents(img)
您可以指定参数connectivity
来检查 4 路或 8 路(默认)连接。不同之处在于,4 向连接只是检查顶部、底部、左侧和右侧像素,看它们是否连接; 8 路检查八个相邻像素中的任何一个是否连接。如果你有对角线连接(就像你在这里做的那样),你应该指定 connectivity=8
。请注意,它只是对每个组件进行编号,并为它们提供从 0 开始递增的整数标签。因此所有的零都相连,所有的零都相连,等等。如果你想可视化它们,你可以将这些数字映射到特定的颜色。我喜欢把它们映射成不同的色调,组合成HSV图像,然后转成BGR显示。以下是您的图片示例:
import cv2
import numpy as np
img = cv2.imread('eGaIy.jpg', 0)
img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1] # ensure binary
num_labels, labels_im = cv2.connectedComponents(img)
def imshow_components(labels):
# 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()
imshow_components(labels_im)
关于python-2.7 - python中的连接组件标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46441893/