2016-03-31 10 views
0

私はバクテリアのイメージの下で働いており、バクテリアの数をイメージから取ることを望んでおり、特定の形状とサイズのバクテリアを分類する必要もあります。 私はopencv pythonを使用しています。今私は輪郭法を使用します。len(等高線)とはどういう意味ですか?

contours,hierarchy = cv2.findContours(dst,1,2) 
    cnt = contours[0] 
    l = len(contours) 
    print l 
    li = list(contours) 
    print li 

これにより、l = 115およびli =いくつかの配列値が出力されます。 これは何を意味しますか?各輪郭点のnumpyの配列である輪郭(X 2列のリストを返すcv2.findCountours

enter image description here

答えて

0

以下answer..e.coli画像を見つけることに助けてくださいy座標)。 len(foo)はリストfooの長さです。あなたの場合、115輪郭が見つかりました。licontoursリストのコピーに過ぎません。

drawContours functionを使用して輪郭を簡単に調べることができます。

# draws contours in white color, outlines only (not filled) 
cv2.drawContours(dst, contours, -1, (255,)) 

cv2.imshow("result", dst) 
cv2.waitKey(-1) 
2

Contoursは連続ポイントを接続し、すべてを配列に配置します。したがって、この配列の各要素は、おそらく異なるバクテリアに対応しています(または、シャドウなどの接続されたカラーグループによる誤検出)。

len(contours)と言うとき、この配列の要素数を取得します。したがって、バクテリアの数の大まかな見積もりが得られます。

あなたの場合、バクテリアである場合とそうでない場合がある周囲とは異なる115のバクテリアまたは色があります。それらのリストを定義してリストを印刷すると、このリストの各要素のプロパティが取得されます。したがって、それぞれの「接続されたポイントグループ」または各「可能性のある細菌」のプロパティが取得されます。そのすべてはかなり簡単です。

あなたはここに多くの誤検出を持っていることを認識した場合、あなたは何をすべきかです:一人として登場するバクテリアの

  • グループ:

    あなたのしきい値画像(黒&に変換白)を使用し、最初にerode関数を使用します。その後、dilate機能を使用して接続を削除します。もう一度findContoursに行ってください。バクテリアとして検出

  • 汚れ:

    あなたのしきい値のみバクテリアの色の範囲をカバーしてくださいので、他のすべては無視されます。

は、以下のソースを参照してください、彼らは役立つかもしれない:

http://docs.opencv.org/trunk/d4/d73/tutorial_py_contours_begin.html#gsc.tab=0

+0

をありがとうございました返信いただきありがとうございます – meera

関連する問題