常見的坐标框轉換:
cxy_wh_2_bbox,cxy_wh_2_rect, rect_2_cxy_wh
預定義:
框坐标表示中 (x,y)為中心點坐标,(x1,y1)為左上角坐标,(x2,y2)為右下角坐标,w和h分别是寬和高,使用圖像坐标系(x軸正方向向下,y軸正方向向右)
rect矩形框形式:

Cxy坐标形式:
bbox邊界框形式:
一般方法:
def rect1_2_cxy_wh(rect): #将矩形框表示形式轉換成坐标形式 輸入rect為(x1,y1,w,h)
return np.array([rect[0]+rect[2]/2-1, rect[1]+rect[3]/2-1]), np.array([rect[2], rect[3]])
# return ((x,y),(w,h)) 此處(x,y)為中心坐标
def cxy_wh_2_rect1(pos, sz): #将坐标轉換成矩形框的表示形式 輸入pos,sz = ((x,y),(w,h))
return np.array([pos[0]-sz[0]/2+1, pos[1]-sz[1]/2+1, sz[0], sz[1]])
# return (x1,y1,w,h) 此處(x1,y1)為左上角坐标
def cxy_wh_2_bbox(cxy, wh): #将坐标轉換成邊界框 輸入cxy,wh = ((x,y),(w,h))
return np.array([cxy[0]-wh[0]/2, cxy[1]-wh[1]/2, cxy[0]+wh[0]/2, cxy[1]+wh[1]/2])
# return (x1,y1,x2,y2) 此處(x1,y1)為左上角坐标,此處(x2,y2)為右下角坐标
上面的類似 pos[0]-sz[0]/2+1的+1 -1 操作應該是取整操作,個人覺得可用//代替
對應使用的場景有:
target_pos, target_sz = rect1_2_cxy_wh(init_rect) #init_rect初始矩形框
bbox = cxy_wh_2_bbox(target_pos, window_sz) #Window_sz 邊界框大小
在計算IoU時,一般就是轉換成bbox的(x1,y1,x2,y2) 形式計算的
注意:
一般在轉換成邊界框bbox時,函數cxy_wh_2_bbox(pos,sz)中的sz是 windos_sz(具體情況具體分析)
說明:
筆者僅做學習筆記使用,若有錯誤,歡迎指正!