(rect坐标转换)rect矩形框的坐标形式转换,以及坐标形式到bbox边界框的转换

Posted faith帅军

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(rect坐标转换)rect矩形框的坐标形式转换,以及坐标形式到bbox边界框的转换相关的知识,希望对你有一定的参考价值。

常见的坐标框转换: 

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 边界框大小
res = [cxy_wh_2_rect1(target_pos, target_sz)]  #target_sz 矩形框大小

在计算IoU时,一般就是转换成bbox的(x1,y1,x2,y2) 形式计算的

注意:

        一般在转换成边界框bbox时,函数cxy_wh_2_bbox(pos,sz)中的sz是 windos_sz(具体情况具体分析)


说明:

        笔者仅做学习笔记使用,若有错误,欢迎指正!

以上是关于(rect坐标转换)rect矩形框的坐标形式转换,以及坐标形式到bbox边界框的转换的主要内容,如果未能解决你的问题,请参考以下文章

java 编写一个矩形类 rect 要求如下:

rect Item wrt到qgraphicsScene中其他rect Item的坐标

将窗口坐标转换为屏幕坐标??

Android界面坐标图示和Rect(矩形)简单介绍

OpenCV中Rect矩阵类

通过继承Rect类编写一个具有确定位置的矩形类PlainRect,其确定位置用 矩形的左上角坐标来标识,包含: 添加两个属性:矩形左上角坐标startX和startY。 两个构造方法: 带4个参数的构