python中的连接组件标签
image-processing
opencv
python-2.7
10
0

如何使用Open CV在python中实现连接的组件标签?这是一个图像示例:

我需要连接的组件标签来分离黑白图像上的对象。

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

用于connectedComponents()OpenCV 3.0文档未提及Python,但实际上已实现。请参见例如此SO问题 。在OpenCV 3.4.0及更高版本中,文档确实包含Python签名,如在当前的主文档中可以看到的那样。

该函数调用很简单: 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)

标签图像

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号