Wil*_*tra 10 opencv image-processing python-2.7 connected-components
如何用open cv在python中实现连通组件标签?这是一个图像示例:

我需要连接组件标签来分隔黑白图像上的对象.
alk*_*asm 36
在OpenCV的3.0文档的connectedComponents()不提的Python但它实际上是执行.请参阅例如此SO问题.在OpenCV 3.4.0及更高版本中,文档包括Python签名,可以在[当前主文档(https://docs.opencv.org/master/d3/dc0/group__imgproc__shape.html#gaedef8c7340499ca391d459122e51bef5)上看到.
函数调用很简单:retval, labels = 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
ret, labels = 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31444 次 |
| 最近记录: |