【问题标题】:How do I fit rectangles to an image in python and obtain their coordinates如何将矩形拟合到python中的图像并获取它们的坐标
【发布时间】:2020-11-16 21:57:06
【问题描述】:

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

假设我们有以下图像

我想得到这样的输出:

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

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

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

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

请注意,虽然未显示孔可以嵌套。

【问题讨论】:

  • 如果有人有任何其他问题,请向他们提问,部分答案和闲散猜测也很有帮助。
  • 如果通过approxPolyDP简化轮廓后可以找到平行线段的端点,则可以取较长的线段反射到另一条线段,以获得角点。
  • @Burak 如果你的形状上有洞,那不是会造成麻烦吗?
  • 是的,也应该检查孔。如果短线段级别有孔,则该矩形无效。如果不是在短线段而是在长线段级别有孔,则将带孔的零件扔出后仍然有一个有效的矩形。
  • 您可能会更幸运地在数学堆栈交换网站上询问数学家。

标签: python opencv image-processing computer-vision scikit-image


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 有趣的想法,也许它可以与 Hough 变换一起使用来获取角点并使用 findcontours 来获取一般形状。也许对 3 个点使用 minAreaRect 的东西,然后用蒙版将结果相乘,看看我们离阈值有多远。
  • minAreaRect() 是用于第 2 步的最佳函数!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多