首先解释一下类型中的成员
RotatedRect该类表示平面上的旋转矩形(摘自任重道远-HSY)包含以下三部分:
- 矩形中心点(质心)
- 边长(长和宽)
- 旋转角度
class CV_EXPORTS 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结构
Point2f center; //矩形的质心
Size2f size; //矩形的边长
float angle; //旋转角度,当角度为0、90、180、270等时,矩形就成了一个直立的矩形
};
这个类中包含了外接矩形的中心center、大小size以及角度angle,首先center是很好理解的,就是这个矩形的中心点位置,而angle代表的是旋转角度,size包含一个width和一个height,代表的是矩形的宽和高,但是具体角度是怎么算以及那条边是宽那条边是高呢?
有博主给出了解释:在opencv中,坐标的原点在左上角,与x轴平行的方向为角度为0,逆时针旋转角度为负,顺时针旋转角度为正。角度是水平轴(x轴)顺时针旋转,与碰到的第一个边的夹角度数。而opencv默认把这个边的边长作为height。
我不知道是否是我理解的问题,发现现实和这个并不一样,然后我做了一个实验,才发现这个角度和size是怎么计算的了:
其实这个角度的范围是0-180°,不会出现负数的情况,角度的计算是从矩形最上边的一个点开始,对于下图左边的情况,角度不会超过90°,右边的一定会大于90°,在这两种情况下,size的width和height我分别标了上去,这是我实验得出来的,是准确的,但是如果一定要说怎么计算的话大概要去看源码了,按照下边来计算也是很方便的,一共只会有这两种可能。