我画了一个极端点周围的轮廓。里面的多边形图我有其他点。 如何检查它们是否在轮廓内?
答案 0 :(得分:8)
您可以使用OpenCV中提供的cv2.pointPolygonTest()函数。
例如:
dist = cv2.pointPolygonTest(cnt,(50,50),True)
在这个例子中,我们检查坐标(50, 50)
是否与轮廓cnt
一起出现
dist
会返回以下三种中的一种:
在函数cv2.pointPolygonTest()
中,第三个参数决定您是否需要以下两个之一:
dist
将返回该点的正距离或负距离,如果它分别位于轮廓内部或外部。有关详细信息,请参阅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)
<强>输出:强>
('dist1 : ', -45.17742799230607)
('dist2 : ', 49.9799959983992)
('dist3 : ', -0.0)