これは画像の例です:
そして、opencv を使用して輪郭を検出します。
>>> fc = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
>>> contours = fc[0]
閉じた輪郭を検出するために、opencv によって返された各輪郭の開始点と終了点を確認することを考えましたが、オブジェクトの形状に関係なく、opencv が各オブジェクトの輪郭を描いているように見えることに気付きました。次の結果が得られます。
>>> for contour in contours:
>>> print(contour[0,:,:], contour[-1,:,:])
[[246 38]] [[247 38]]
[[92 33]] [[93 33]]
または、見つかった各輪郭がパスを閉じています。
関数で使用可能なメソッドへの追加の定数を検索しましfindContour()
たが、すべて閉じたパスを返すようです。
見つかった輪郭が閉じているかどうかを検出する一般的な方法はありますか?
質問する前にグーグルで検索しましたが、結果は得られませんでしたが、右側の同様の質問に適切な候補が表示されます: opencv で輪郭が開いているか閉じているかを知るにはどうすればよいですか? を使用することをお勧めしますcv2.isContourConvex(contour)
が、次のとおりです。
>>> for contour in contours:
>>> print(cv2.isContourConvex(contour))
False
False
さらに別の更新:contourAreaは(少なくとも単純な輪郭の場合)答えを提供するように見えますが、上記の例の画像以外ではテストしませんでした:
>>> for contour in contours:
>>> print(cv2.contourArea(contour))
0.0
12437.5