【问题标题】:how to find order of rectangles sorted by the overlapping (python)如何找到按重叠排序的矩形顺序(python)
【发布时间】:2020-11-20 16:00:13
【问题描述】:

将图像作为输入,例如示例之一,我想通过重叠排列组成它的彩色矩形。

我会解释: 从图像中我可以得到格式为 (x, y) 的每个点的矩形

示例:

{("蓝色"): [(5, 5), (6, 5), (7, 5), (8, 5), (9, 5), (10, 5), (11, 5), (12, 5), (13, 5), (14, 5), (15, 5), (16, 5), (17, 5), (18, 5), (19, 5) , (20, 5), (21, 5), (22, 5), (23, 5), (24, 5), (25, 5), (26, 5), (27, 5), ( 5, 6), (27, 6), (5, 7), (27, 7), (5, 8), (27, 8), (5, 9), (27, 9), (5, 10), (27, 10), (5, 11), (27, 11), (5, 12), (27, 12), (5, 13), (27, 13), (5, 14) , (27, 14), (5, 15), (27, 15), (5, 16), (27, 16), (5, 17), (27, 17), (5, 18), ( 27, 18), (5, 19), (27, 19), (5, 20), (5, 21), (27, 21), (5, 22), (27, 22), (5, 23), (27, 23), (5, 24), (5, 25), (27, 25), (5, 26), (27, 26), (5, 27), (6, 27) , (7, 27), (8, 27), (9, 27), (10, 27), (11, 27), (12, 27), (13, 27), (14, 27), ( 15, 27), (16, 27), (17, 27), (18, 27), (19, 27), (21, 27), (22, 27), (23, 27), (25, 27), (26, 27), (27, 27)]

表示一个字典,其键是矩形的颜色,作为值是形成它的每个单个像素的列表,通过它在空间中的 x 和 y 坐标

因此,我可以获得每个矩形的空间坐标 ((5,5), (27,27)),它们代表左上角和右下角。

但是,我找不到按绘制矩形的顺序对矩形进行排序的方法。

图片中的示例: 矩形的顺序将是蓝色、绿色和黄色,因为我必须绘制它们才能按此顺序重新获得图像,以保持正确的交叉点顺序。

p.s 我想在不使用库的情况下制作它,例如 openCV ecc..

编辑。

我将 png 图像作为输入。 我创建了一个元组列表列表,其中我拥有图像的每个像素 表示为 RGB 元组(例如 (0, 0, 255))

我希望将每个矩形编码为代表矩形颜色的像素。 : encoded rectangles

因此,编码图像让您知道将首先绘制蓝色矩形,然后是绿色矩形,最后是黄色矩形。

这就是我所说的重叠顺序: 如果我从编码图像中按顺序绘制矩形,我会获得与原始图像相同的重叠。

【问题讨论】:

  • 我不明白您的“示例(不是来自图像):”中的所有数字是什么意思以及它们与问题的关系。输入是什么样的?您只有要使用的图像还是其他东西?
  • 只有图像。我可以区分每个矩形: def get_pixels(img): ` coords = {} for j in range(len(img[0])): for i in range(len(img)): rgb = img[i][j ] if rgb != (0, 0, 0): coords[rgb] = coords.get(rgb, []) + [(i, j)] return coords`我有一个字典,每个矩形的颜色和它的坐标( x,y)。
  • 我希望将每个矩形水平编码为 5 个连续像素: - 四个像素代表其空间坐标((5,5),(27,27)),我使用来自十进制到 rgb 元组 - 最后一个像素是矩形的颜色。
  • 所以我制作了一个位图,必须按照绘制的方式进行排序
  • 1) 定位每对矩形的相交像素; 2) 找出相交像素的颜色,并使用它来决定两个矩形中的哪一个在另一个之上 3) 使用在步骤 2 中建立的比较对矩形列表进行排序)

标签: python image-processing


【解决方案1】:

虽然问题很不清楚,但我似乎理解你

  • 有颜色像素的原始列表,这些像素是绘制重叠矩形边缘的结果;

  • 能够找出它们起源的矩形。

如果是这种情况,则遍历矩形的边缘,每次遇到不同颜色的像素(比如绿色而不是蓝色)时,将其记为“绿色与蓝色重叠”的关系)。然后对得到的偏序进行拓扑排序。

可能有更难的情况,例如多个重叠或多个相同颜色的矩形。

【讨论】:

  • 我已经实现了一个卡恩算法来进行拓扑排序,效果很好。
  • 但是如果顶点数超过十个就开始出错了,不知道拓扑排序的顶点数有没有限制?
  • @Wilwbus:显然不是!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
相关资源
最近更新 更多