0

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

在此处输入图像描述

我想要

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

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

像这样

在此处输入图像描述

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

也可能是我有这样的图像,它没有这样的直线。

在此处输入图像描述

我曾经cv2.approxPolyDP画过形状,但它们又是凹的,我需要将它们分开。

任何帮助表示赞赏。

4

2 回答 2

1

我能想到的一种方法是,对于每个轮廓,首先找到它的凸包。看到这个链接

现在找到轮廓与其凸包之间的缺陷点。看到这个链接

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

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

于 2020-07-13T08:16:39.843 回答
0

好的,谢谢拉胡尔的回答。

我最终找到了一个包,它可以帮助我分割解决我的问题的多边形。

下载:

pip install sect 

然后 :

from sect.triangulation import constrained_delaunay_triangles

取 openCV 生成的轮廓 - 这会生成如下。

在此处输入图像描述

然后“平滑”颜色,这样颜色就更少了。我用过这个

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

然后通过 sect 运行它

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

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

在此处输入图像描述

于 2020-07-13T15:23:33.277 回答