在python中将多个边界框存储为列表

Posted

技术标签:

【中文标题】在python中将多个边界框存储为列表【英文标题】:Storing multiple bounding boxes as a list in python 【发布时间】:2018-02-05 23:05:48 【问题描述】:

我正在编写从图像中提取边界框的代码,然后使用基本事实注释计算 IoU。我预测的和基本事实的边界框坐标都是列表 [xmin,ymin,xmax,ymax] 的形式。我编写了一个 for 循环,它从字典中提取边界信息,然后将其存储在列表中。

box = v7wpoint.boxidtobox[answer_boxid]
for key in box:
    #    print key
    xmin_gt = box.get('x')
    ymin_gt = box.get('y')
    height = box.get('height')
    width = box.get('width')
    final_bb = []
    xmax_gt = xmin_gt+width
    ymax_gt = ymin_gt+height
    bb_gt = [xmin_gt,ymin_gt,xmax_gt,ymax_gt]
    final_bb.append(bb_gt)

    rect_gt = np.array([[xmin_gt,ymin_gt],[xmin_gt,ymax_gt],[xmax_gt,ymax_gt],[xmax_gt,ymin_gt],[xmin_gt,ymin_gt]])
    plt.plot(rect_gt[:,0],rect_gt[:,1],'g',markersize=4)
    print (box.get('x'),box.get('y'),box.get('height'),box.get('width'),box.get('name'))

在这个 for 循环结束时,我只得到一个边界框信息 - final_bb([xmin,ymin,xmax,ymax])。我需要一个包含所有边界框坐标列表的列表。像这样的

1. [xmin,ymin,xmax,ymax]
2. [xmin,ymin,xmax,ymax]
3. [xmin,ymin,xmax,ymax]
.
.
.
N. [xmin,ymin,xmax,ymax]

我知道这是一个非常微不足道的问题,但我是 python 新手,在 python 中操作数据结构时遇到困难。

【问题讨论】:

for 循环的目的是什么?看起来它从box 中提取了几个键,一遍又一遍,与键的次数一样多。循环套件不依赖key的值,那么反复做这些操作有什么作用呢? 'box' 是一个包含所有真实标注的字典。我只从该字典中提取特定的键。此 for 循环中的操作是计算框的坐标,然后将其绘制在图像上。另一个操作是将坐标存储为列表。 这并没有回答问题,为什么每个键操作一次,当行为不依赖于相关键的身份时。换句话说,你可以用 box 的函数替换整个循环体,它没有引用 key,那为什么需要发生很多次呢? 【参考方案1】:

将赋值final_bb = []移到循环之前,否则每次迭代都会覆盖结果列表。

不包括完整代码,因为给出的示例对我来说仍然没有意义。

【讨论】:

谢谢。我这样做了,现在我得到了上述格式的数据。

以上是关于在python中将多个边界框存储为列表的主要内容,如果未能解决你的问题,请参考以下文章

在python中将列表错误地转换为数据框[重复]

如何在python中将文本字符串列表转换为熊猫数据框?

在列表框 ms-access 2013 VBA 中将多个不同的字段作为列表项返回

使用边界框列表从图像中裁剪多个边界框

Python:将多个数据框存储在列表中

需要在pyspark中将列表转换为数据框