2017-08-28 65 views
0

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

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] 

东西,我知道这是一个很琐碎的问题,但我在蟒蛇操纵数据结构是新来的蟒蛇和面临的困难。

+0

for循环的目的是什么?它看起来像是一次又一次地从'box'中提取几个密钥,并且有多少个密钥。循环套件不依赖于'key'的值,那么这些操作重复完成的是什么? – mwchase

+0

'box'是一个包含所有地面真实注释的字典。我只从该字典中提取特定的键。这个for循环中的操作是计算框的坐标,然后将其绘制在图像上。另一个操作是将坐标存储为列表。 – Ka93

+0

这并没有回答这样的问题,为什么每个关键操作一次,当行为不取决于有问题的关键字的身份时。换句话说,你可以用'box'函数替换整个循环体,它不会引用'key',为什么它需要发生一堆? – mwchase

回答

0

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

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

+0

谢谢。我这样做了,现在我正在以上述格式获取数据。 – Ka93