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

时间:2018-06-03 19:40:20

标签: python opencv opencv3.0 opencv-contour

我画了一个极端点周围的轮廓。里面的多边形图我有其他点。 如何检查它们是否在轮廓内?

1 个答案:

答案 0 :(得分:8)

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

例如:

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

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

  1. dist会返回以下三种中的一种:

    • 积极值,如果该点内部
    • 值,如果该点轮廓
    • 如果点<<>> 轮廓
  2. 在函数cv2.pointPolygonTest()中,第三个参数决定您是否需要以下两个之一:

    • 如果 True dist将返回该点的正距离或负距离,如果它分别位于轮廓内部或外部。
    • 另一方面,如果设置为 False ,它将分别返回+1,-1或0,具体取决于位于内部,外部或轮廓上的点
  3. 有关详细信息,请参阅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)