如何检查点是否位于轮廓内?

How to check if point is placed inside contour?

我已经在极值点周围画了一个等高线。在多边形图形内部我还有其他要点。 如何检查它们是否在轮廓内?

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

例如:

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

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

  1. dist returns 以下三项之一:

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

    • 如果是Truedist returns点的正距离或负距离,如果它分别在轮廓内部或外部.
    • 另一方面,如果设置为False,它returns+1、-1或0取决于位于内部、外部或之上的点轮廓分别

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

插图:

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

我假定以下几点作为说明:

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

dist1 = cv2.pointPolygonTest(contours[0], (50, 70), True) #green 
dist2 = cv2.pointPolygonTest(contours[0], (170, 152), True) #blue
dist3 = cv2.pointPolygonTest(contours[0], (152, 48), True) #red

print('dist1 : ', dist1)
print('dist2 : ', dist2)
print('dist3 : ', dist3)

输出:

('dist1 : ', -45.17742799230607)
('dist2 : ', 49.9799959983992)
('dist3 : ', -0.0)