如何检查点是否位于轮廓内?
How to check if point is placed inside contour?
我已经在极值点周围画了一个等高线。在多边形图形内部我还有其他要点。
如何检查它们是否在轮廓内?
您可以使用 OpenCV 中提供的 cv2.pointPolygonTest()
函数。
例如:
dist = cv2.pointPolygonTest(cnt,(50,50),True)
在此示例中,我们正在检查坐标 (50, 50)
是否存在于轮廓 cnt
中
dist
returns 以下三项之一:
- 正值 如果点在内部 轮廓
- 负值 如果点在外部 轮廓
- 零 如果点在 轮廓
在函数中cv2.pointPolygonTest()
第三个参数决定你是否想要以下两个参数之一:
- 如果是True,
dist
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)
我已经在极值点周围画了一个等高线。在多边形图形内部我还有其他要点。 如何检查它们是否在轮廓内?
您可以使用 OpenCV 中提供的 cv2.pointPolygonTest()
函数。
例如:
dist = cv2.pointPolygonTest(cnt,(50,50),True)
在此示例中,我们正在检查坐标 (50, 50)
是否存在于轮廓 cnt
dist
returns 以下三项之一:- 正值 如果点在内部 轮廓
- 负值 如果点在外部 轮廓
- 零 如果点在 轮廓
在函数中
cv2.pointPolygonTest()
第三个参数决定你是否想要以下两个参数之一:- 如果是True,
dist
returns点的正距离或负距离,如果它分别在轮廓内部或外部. - 另一方面,如果设置为False,它returns+1、-1或0取决于位于内部、外部或之上的点轮廓分别
- 如果是True,
有关详细信息,请参阅 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)