Press "Enter" to skip to content

旋转框目标检测————关于旋转框定义和解决方案

1、旋转框表示

 

1、如何表示一个旋转框?

 

 

2、Opencv表示法

 

关于不同版本opencv的cv2.minAreaRect函数输出角度范围不同的问题。

 

在做旋转矩形⽬标检测时碰到⼀个问题,我所使⽤的数据集的标签为不规则四边形的四个点的坐标(x1,y1,x2,y2,x3,y3,x4,y4),要将其转化为旋转⽬标检测的标签(x,y,longside,shortside,angle)。其中,需要⽤到opencv中的cv2.minAreaRect函数。

 

cv2.minAreaRect函数的作⽤是返回不规则四边形的最⼩外接矩形(能不能返回多边形的最⼩外接矩形没有验证)

 

备注:cv2.boxPoints函数可以根据cv2.minAreaRect函数的返回值给出最⼩外接矩形的四点坐标

 

为了更⽅便的进⾏可视化说明,我们先定义两个函数draw_rect和rotate_rect

 

import numpy as np
import cv2
import matplotlib.pyplot as plt
defdraw_rect(rect):
在
画布上画矩形
# 
im
rect
    im = np.zeros([240,320], dtype = np.uint8)
    cv2.polylines(im,[rect],1,255)
    plt.imshow(im)
    plt.show()
defrotate_rect(rect, angle):
输出
旋转后的矩形四个点的坐标,
为正及顺时针旋转,为负及逆时针旋转
# 
rect
angle
(x,y),(w,h),a = cv2.minAreaRect(rect)
    rect_r =((x,y),(w,h), a+angle)
return cv2.boxPoints(rect_r).astype(np.int32

 

关于cv2.minAreaRect

 

输⼊:四边形的四个点(不要求顺序)

 

输出:最⼩外接矩形的中⼼点坐标x,y,宽⾼w,h,⾓度anlge,输出形式为元组((x,y),(w,h),anlge),顺序格式不变

 

中⼼点坐标x,y⽐较容易理解

 

宽w的定义在4.2和4.5有区别,具体是哪个版本没有确定

 

1、opencv4.2版本(Doc)

 

OpenCV在版本4.5.1之前,表示形式为 [公式] ,示意图如下

 

**其中4.2版本的定义为,x轴逆时针旋转最先重合的边为w,此时x轴逆时针旋转的⾓度为-angle(负号没错)

 

具体解释为:旋转矩形rect有两条边L和S(分别为长边和短边),x轴逆时针旋转,如果最先与L边重合(也可以理解为平⾏),那幺L就是

 

Opencv  format:   x_c         y_c        width       height      Θ

 

参数介绍:

 

x_c与y_c:旋转矩形框的中心坐标;

 

width:x轴逆时针旋转碰到矩形的第一条边;

 

height:与width对应的另一边;

 

Θ:x轴逆时针旋转与width的夹角,由于原点位于图像的左上角,逆时针旋转角度为负 ,Θ∈[-90, 0)

 

2、opencv4.5版本((Doc’))

 

4.5版本定义为,x轴顺时针旋转最先重合的边为w,angle为x轴顺时针旋转的⾓度,angle取值为(0,90]

 

3、长边定义法1(Dle)

 

 

4、长边定义法2((Dle’))

 

 

5、表示法之间的转换关系

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注