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

OPV*_*OPV 4 python opencv opencv3.0 opencv-contour

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

Jer*_*uke 14

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

例如:

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

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

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

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

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

有关详细信息,请参阅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)
Run Code Online (Sandbox Code Playgroud)

输出:

('dist1 : ', -45.17742799230607)
('dist2 : ', 49.9799959983992)
('dist3 : ', -0.0)
Run Code Online (Sandbox Code Playgroud)