PythonのOpenCVは、次のコードを提供します。
regions, hierarchy = cv2.findContours(binary_image, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
for region in regions:
x, y, w, h = cv2.boundingRect(region)
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 1)
これにより、輪郭内にいくつかの輪郭が得られます。 Pythonでそれらを削除する方法は?
そのためには、メソッドhierarchy
によって返されるfindContours
オブジェクトの使用方法について このチュートリアル を参照する必要があります。
重要な点は、クラスター間の親子関係を取得するには、cv2.RETR_TREE
ではなくcv2.RETR_LIST
を使用する必要があるということです。
regions, hierarchy = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
次に、hierarchy[0,i,3]
が-1に等しいかどうかを確認することで、インデックスi
の輪郭が別の輪郭の内側にあるかどうかを確認できます。 -1と異なる場合、輪郭は別の輪郭の内側にあります。