2017-09-27 21 views

答えて

2

OpenCVのconnectedComponents() docs上のオブジェクトを分離するために、連結成分のラベル付けを必要とするが、それは実際に実装されています。たとえばを参照してください。 this SO question

関数呼び出しは単純です:retval, labels = cv2.connectedComponents(img)パラメータconnectivityを指定して、4方向または8方向(デフォルト)の接続性を確認できます。違いは、4方向接続では、上下左右のピクセルをチェックし、接続しているかどうかを確認するだけです。隣接する8つのピクセルのいずれかが接続されている場合、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がアップグレードが必要と思う –