Opencv Contours - 将凹多边形拆分为多个凸多边形

Open CV Contours - Splitting concave polygon into multiple convex ones

我在 numpy 数组中有下面的图像

我要

  1. 将块分成单独的轮廓或任何坐标表示。

  2. 然后我想将任何凹多边形转换为多个凸多边形。

像这样

到目前为止,我已经设法用 opencv 将每个块隔离成等高线...但是有没有一种简单的方法可以将 L 形对象分成两个或更多方形块。如果需要,每个形状的新轮廓可以重叠。

也可能是我有这样一张图片,没有这样的直线。

我用cv2.approxPolyDP画了形状,但又是凹的,我需要把它们分开。

感谢任何帮助。

我能想到的一种方法是,对于每个轮廓,先找到它的凸包。See this link

现在找出轮廓与其凸包之间的缺陷点。 See this link

现在使用缺陷距离数据,找到距离最大的点。该点将是 2 个对象以 L 形连接的点。现在从这一点开始,画一条垂直线到该点的轮廓切线,然后再次找到轮廓。生成的轮廓将是 L 形的 2 个轮廓。

注意:在这种方法中,一个对象的某些部分可能会在边界处分割它们时进入另一个对象。

好的,谢谢 Rahul 的回答。

我最终找到了一个包,可以帮助我对多边形进行剖分,从而解决了我的问题。

下载方式:

pip install sect 

然后:

from sect.triangulation import constrained_delaunay_triangles

采用 openCV 生成的轮廓 - 生成的轮廓如下。

然后“平滑”颜色以减少颜色。我用过这个

epsilon = 0.005 * cv2.arcLength(contour, True)
approx = cv2.approxPolyDP(contour, epsilon, True)

然后运行它通过教派

constrained_delaunay_triangles([tuple(x) for x in approx.squeeze()])

输出将多边形分割成三角形,完全移除所有凹多边形。