如何检查点是否位于等高线内?

2024-10-05 11:46:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经画了一个关于极限点的轮廓。在多边形内我有其他点。 如何检查它们是否在轮廓内?


Tags: 多边形轮廓极限点
1条回答
网友
1楼 · 发布于 2024-10-05 11:46:16

您可以使用OpenCV中的cv2.pointPolygonTest()函数。

例如:

dist = cv2.pointPolygonTest(cnt,(50,50),True)

在这个例子中,我们检查坐标(50, 50)是否与轮廓cnt一起存在

  1. dist返回以下三个值之一:

    • 如果点在轮廓内部值
    • 负值如果点在轮廓外部
    • 归零如果点在轮廓上
  2. 在函数cv2.pointPolygonTest()中,第三个参数决定是否需要以下两个参数之一:

    • 如果它是真的dist返回点的正距离或负距离,如果它分别位于轮廓内部或外部。
    • 另一方面,如果设置为False,则返回+1、-1或0,具体取决于分别位于轮廓内、外或轮廓上的点

有关详细信息,请参见THE DOCS

图解:

我添加了一个例子来说明它是如何工作的。我考虑了以下获得轮廓的图像:

enter image description here

我假设以下几点可以作为说明:

(50, 70), (170, 152), (152, 48)

enter image description here

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)

相关问题 更多 >

    热门问题