2017-09-27 103 views

回答

2

在OpenCV connectedComponents() docs對不同的對象不提Python的,但它實際上是執行。參見例如this SO question

該函數調用很簡單: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) 

# 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() 

Labeled image

+0

感謝亞歷山大,我已經使用cv2.connectedComponents,但我發現eror這樣, AttributeError的: '模塊' 對象有沒有屬性 'connectedComponents' –

+0

啊,那麼你很可能在一個較舊版本的OpenCV中綁定尚未移植。你使用的是什麼版本的OpenCV?如果你不能升級,那麼考慮另一個類似'scikit-image'的庫; [這裏是一個例子](http://www.scipy-lectures.org/packages/scikit-image/auto_examples/plot_labels.html)。或者,您可以檢測輪廓並使用它來標記圖像。 –

+0

我的opencv版本'2.4.13'。 非常感謝,非常有幫助,我認爲我的opencv需要升級 –