如何正确实现边界框从右上到左下的排序?
文本边界框按右上到左下排序问题
需求概述
需要将检测到的文本边界框按照右上到左下的规则完成排序。
参数说明
- 输入:
dt_boxes(数组):检测到的文本框集合,每个文本框为形状[4, 2]的数组,四个点顺序依次为左上、右上、右下、左下
- 输出:
sorted_boxes(数组):排序后的文本框集合,形状与输入一致
示例输入
示例1
[[[258.0, 52.0], [329.0, 46.0], [329.0, 72.0], [260.0, 76.0]], [[91.0, 32.0], [174.0, 43.0], [175.0, 68.0], [90.0, 64.0]], [[182.0, 45.0], [266.0, 42.0], [266.0, 69.0], [184.0, 74.0]], [[16.0, 41.0], [97.0, 39.0], [98.0, 64.0], [17.0, 69.0]], [[226.0, 4.0], [296.0, 4.0], [296.0, 32.0], [227.0, 35.0]], [[288.0, 9.0], [331.0, 2.0], [331.0, 36.0], [289.0, 39.0]]]
示例2
[[[224.0, 85.0], [381.0, 83.0], [381.0, 128.0], [223.0, 126.0]], [[412.0, 88.0], [544.0, 81.0], [545.0, 129.0], [413.0, 134.0]], [[291.0, 18.0], [357.0, 18.0], [357.0, 56.0], [292.0, 68.0]], [[122.0, 12.0], [295.0, 11.0], [296.0, 57.0], [125.0, 64.0]], [[350.0, 22.0], [435.0, 11.0], [435.0, 55.0], [351.0, 66.0]], [[442.0, 15.0], [538.0, 11.0], [539.0, 49.0], [442.0, 57.0]], [[9.0, 12.0], [125.0, 8.0], [127.0, 54.0], [10.0, 63.0]]]
尝试方案及问题
我尝试通过右上点的坐标进行排序,代码如下:
sorted_boxes = sorted(dt_boxes, key=lambda x: (x[1][1], x[1][0]), reverse=True)
但该代码未得到符合预期的排序结果,实际排序效果与期望的右上到左下顺序不符。
期望排序效果
期望排序后,边界框按照从上到下、从右到左的逻辑排列(即先按垂直方向从上到下分组,同一行内的框从右到左排序,对应视觉上的右上到左下顺序)。
内容的提问来源于stack exchange,提问作者ahmed osama
相关产品推荐
相关产品推荐

