如何检查点是否放置在轮廓内?

开V

我已在极端点周围绘制了轮廓。在多边形图中,我还有其他要点。如何检查它们是否在轮廓内?

杰鲁·卢克

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

例如:

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

在此示例中,我们正在检查(50, 50)轮廓是否存在坐标cnt

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

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

    • 如果为True,则dist返回该点的正或负距离(如果该点分别在轮廓的内部或外部)。
    • 另一方面,如果将其设置为False,则分别根据位于内部,外部或轮廓上的点返回+ 1,-1或0

有关更多详细信息,请参见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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章