minAreaRect:返回指定点集的带方向的最小外接矩形,数据类型为RotatedRect,其中返回的角度θ范围为(-90°,0°]。
如果需要将θ限制在(-45°,45°],如:获取到角度-80°时,后面流程我需要的是顺时针旋转10°,如果直接使用是逆时针旋转80°,可参考以下实现,使输出为10°。
其中逆时针旋转角度为负,顺时针旋转角度为正。
RotatedRect rect = minAreaRect(conMinArea);
float fAngle = rect.angle;//θ∈(-90度,0]
if (fAngle < -45)
fAngle = 90 + fAngle;
一般地,RotatedRect中,逆时针旋转时角度递增,输入角度值可以超过360°,注意width与height不是按照长短来定义的。
获取RotatedRect格式的四个顶点坐标代码如下:
Point2f* vertices = new cv::Point2f[4];
RotatedRect rect = RotatedRect(Point2f(800, 2000), Size2f(10, 1000), 90);
rect.points(vertices);
for (int j = 0; j < 4; j++)
line(imgShow, vertices[j], vertices[(j + 1) % 4], cv::Scalar(255, 10, 0));//逐条边绘制旋转矩形