RotatedRect是一个存储旋转矩形的类,通常用来存储最小外包矩形函数minAreaRect( )和椭圆拟合函数fitEllipse( )返回的结果。存储的值,完全取决在于函数的返回
类的声明:OpenCV3 帮助文档
class RotatedRect
{
public:
RotatedRect(); //构造函数
RotatedRect(const Point2f& center, const Size2f& size, float angle);
RotatedRect(const CvBox2D& box);
void points(Point2f pts[]) const; //返回矩形的4个顶点
Rect boundingRect() const; //返回包含旋转矩形的最小矩形
operator CvBox2D() const; //转换到旧式的cvbox2d结构
float angle; //旋转角度,当角度为0、90、180、270等时,矩形就成了一个直立的矩形
Point2f center; //矩形的质心
Size2f size; //矩形的边长
}
OpenCV中,坐标的原点在左上角,与x轴平行的方向为角度为0,逆时针旋转角度为负,顺时针旋转角度为正
minAreaRect( )函数和fitEllipse( )函数返回值不太一样
minAreaRect( )函数
返回的参数,请看下图:
角度参数angle 是矩形最下面的点(y坐标最大)P[0]发出的平行于x轴的射线,逆时针旋转,与碰到的第一个边的夹角(这个边的边长就作为width),取值范围[-90~0]。
成员函数
void points(Point2f pts[]) const; //返回矩形的4个顶点
可以计算出矩形的四个角点。计算出来的角点是固定的顺序,如图所示。
在利用minAreaRect函数去求一个外接矩形时,函数对于矩形长和宽的选择取决于这个外接矩形的边与水平轴的角度距离,即将水平轴逆时针旋转,最先与其平行的边的长度作为宽度width,另外一条边则为height,而角度则直接取该边与水平轴的夹角。应该意识到,在minAreaRect函数中,RotatedRect的width和height的选取跟矩形的尺寸无关,并非长的就是height,短的就是width。
fitEllipse( )函数
返回的参数,请看下图:
角度参数angle 是椭圆中心center发出的平行于x轴的射线,顺时针旋转,与椭圆短轴的夹角,取值范围 [ 0 ~ 180 ]
椭圆的短轴为参数size里面的第一个参数width,长轴为参数size里面的第二个参数height。