Opencv Contours - 将凹多边形拆分为多个凸多边形
Open CV Contours - Splitting concave polygon into multiple convex ones
我在 numpy 数组中有下面的图像
我要
将块分成单独的轮廓或任何坐标表示。
然后我想将任何凹多边形转换为多个凸多边形。
像这样
到目前为止,我已经设法用 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()])
输出将多边形分割成三角形,完全移除所有凹多边形。
我在 numpy 数组中有下面的图像
我要
将块分成单独的轮廓或任何坐标表示。
然后我想将任何凹多边形转换为多个凸多边形。
像这样
到目前为止,我已经设法用 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()])
输出将多边形分割成三角形,完全移除所有凹多边形。