3

我正在寻找一种将多个图像拆分为适当矩形的方法。这些矩形具有理想的形状,使得它们中的每一个都具有尽可能大的尺寸,而不包含大量的白色。

所以假设我们有以下图像 输入

我想得到这样的输出: 输出

请注意重叠的矩形、孔和非轴对齐的矩形,所有这些都可能是我必须处理的场景。

我的目标是获得描述矩形角块的坐标,例如

[[(73,13),(269,13),(269,47)(73,47)],
 [(73,13),(73,210),(109,210),(109,13)]
...]

为了做到这一点,我已经看过了,cv2.findContours但我无法让它与重叠的矩形一起工作(尽管我可以使用层次模型来处理孔,因为这会导致轮廓合并为一个。

请注意,尽管未显示孔可以嵌套。

4

1 回答 1

2

大致如下工作的算法应该能够为您提供您寻求的结果。

  1. 获取图像中的所有角点。
  2. 随机选择3个点创建一个矩形
  3. 计算矩形内黄色像素的比率,如果比率满足阈值则接受。
  4. 重复 2 到 4 直到:a) 点的每个组合都完成或 b) 所有黄色像素都被考虑或 c) 在 n 次迭代后

该算法的难点在于步骤 2,从 3 个点创建矩形。

如果所有矩形都是直角,您可以简单地找到对应于左上角的最小 x 和 y 以及对应于新矩形的右下角的最大 x 和 y。

但是由于您有离轴矩形,因此在生成矩形之前,您需要检查从 3 个点创建的两个向量之间是否有 90 度角。

于 2020-07-28T07:31:09.180 回答