極値の周りに等高線を描きました。ポリゴンフィギュアの中には他にもポイントがあります。それらが輪郭の内側にあるかどうかを確認する方法は?
OpenCVで利用可能なcv2.pointPolygonTest()関数を使用できます。
例えば:
dist = cv2.pointPolygonTest(cnt,(50,50),True)
この例では、座標_(50, 50)
_が等高線cnt
とともに存在するかどうかを確認しています。
dist
は、次の3つのいずれかを返します。
関数cv2.pointPolygonTest()
内で、3番目のパラメーターは次の2つのいずれかが必要かどうかを決定します。
dist
は、ポイントが輪郭の内側または外側にある場合、ポイントの正または負の距離を返します。詳細については、 THE DOCS を参照してください。
それがどのように機能するかを示す例を追加しました。輪郭が得られた次の画像を検討しました。
例として、次の点を想定しました。
_(50, 70), (170, 152), (152, 48)
_
_dist1 = cv2.pointPolygonTest(contours[0], (50, 70), True)
dist2 = cv2.pointPolygonTest(contours[0], (170, 152), True)
dist3 = cv2.pointPolygonTest(contours[0], (152, 48), True)
print('dist1 : ', dist1)
print('dist2 : ', dist2)
print('dist3 : ', dist3)
_
出力:
_('dist1 : ', -45.17742799230607)
('dist2 : ', 49.9799959983992)
('dist3 : ', -0.0)
_