python-2.7 - python中的连接组件标记

标签 python-2.7 opencv image-processing connected-components

如何用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)

Labeled image

关于python-2.7 - python中的连接组件标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46441893/

相关文章:

opencv - 为什么在 OpenCV 中没有 MaskPredicate::operator=(const MaskPredicate&) 的定义?

MATLAB - 如何消除图像上的阴影背景

python - 边缘检测未按预期工作

python - 从多个列表中选择组合

3d - 如何使用 OpenCV cvProjectPoints2 函数

opencv - 如何在Windows Phone 8中写入文件(编码)修改后的相机框架

html - JSP文件上传

python - Python 日志记录模块在多处理上下文中的令人困惑的行为

Python读取目录中的文件

python - Python 2.7 中的 float 学精度