2017-08-28 63 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