2

最大のオブジェクトの輪郭を描こうとしています。

最初に、すべての輪郭を描画する画像を示します。

すべての輪郭オブジェクト

最大のオブジェクトを見つけるために、次のコードを使用しました。

maxsize = 0  
best = 0  
count = 0  
for cnt in contours:  
    if cv2.contourArea(cnt) > maxsize:  
        maxsize = cv2.contourArea(cnt)  
        best = count  
    count += 1  

cv2.drawContours(img_rgb, contours[best], -1, (0,0,255), 2)  

そして結果は次のとおりです。 最大のオブジェクトの輪郭

等高線が接続されていないのはなぜですか?

前もって感謝します。

4

1 に答える 1

3

-1実際には 1 つだけを描画したい場合に、パラメーターによって関数にすべての輪郭を描画するように指示しているコードを確認してくださいbest。そのため、(all) の代わりに、-1必要な輪郭を描画する関数を単純に要求できます。

次の行を置き換えることで、この問題を修正できます。

cv2.drawContours(img_rgb, contours[best], -1, (0,0,255), 2)  

と:

cv2.drawContours(img_rgb, contours, best, (0,0,255), 2)

または、引き続き を使用できますが、パラメータとしてポイントのセット ( )-1が必要になります。[]

cv2.drawContours(img_rgb, [contours[best]], -1, (0,0,255), 2)  

このテーマの詳細については、OpenCV ドキュメント ページを参照してください。

于 2014-12-25T20:46:23.670 に答える