您可以使用OpenCV中提供的cv2.pointPolygonTest()函数.
例如:
dist = cv2.pointPolygonTest(cnt,(50,50),True)
在这个例子中,我们检查坐标(50,50)是否与轮廓cnt一起出现
> dist返回以下三种中的一种:
>如果该点位于轮廓内,则为正值
>如果该点在轮廓之外,则为负值
>如果该点在轮廓上,则为零
>在函数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)
输出:
('dist1 : ', -45.17742799230607)
('dist2 : ', 49.9799959983992)
('dist3 : ', -0.0)