【发布时间】:2018-11-13 04:24:30
【问题描述】:
我在极值点周围画了一个轮廓。在多边形图中我还有其他点。 如何检查它们是否在轮廓内?
【问题讨论】:
标签: python opencv opencv3.0 opencv-contour
我在极值点周围画了一个轮廓。在多边形图中我还有其他点。 如何检查它们是否在轮廓内?
【问题讨论】:
标签: python opencv opencv3.0 opencv-contour
您可以使用 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) #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)
【讨论】:
pts = np.array(b, np.int32) pts = pts.reshape((-1,1,2)) cv2.polylines(image,[pts],True,(0,255,0))
list 中一个接一个地传递它们。