使用OpenCV校正蒙版中形状的边缘

时间:2020-02-14 13:44:13

标签: python numpy opencv mask contour

我需要校正形状(多边形)的边缘,如下图所示。

enter image description here

这是cv2.approxPolyDPm的结果,大约是cv2.findContours的结果:

for (i, c) in enumerate(cnts):
    peri = cv2.arcLength(c, closed=True)
    approx = cv2.approxPolyDP(c, epsilon=0.01 * peri, closed=True)

某些边界不是笔直的。我需要它们完全垂直或水平。 我尝试修改 epsilon 值没有成功。

1 个答案:

答案 0 :(得分:4)

您需要添加另一个阶段,以强制轮廓顶点仅形成水平和垂直直线。

如果两个顶点p1p2的y坐标非常接近(例如低于10个像素),则需要将p1的y坐标固定为等于{{ 1}},反之亦然。

这是一个工作代码示例(请阅读注释):

p2

结果:
enter image description here

注意:该解决方案需要一些抛光(我的意图是使轮廓具有最小的面积)。

相关问题