OpenCV轮廓篇--旋转矩形矫正
程序员文章站
2022-07-12 23:40:51
...
之前一直这里很迷,现在做一个整理测试,下图搬运。
先看一下RotatedRect属性定义:
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等时,矩形就成了一个直立的矩形
};
其中opencv奇葩的角度定义如下:
其实观点点就是我们定义的长和宽和opencv定义的轮廓长宽是不一样的,所以需要转化我认知的长于宽,倾斜角度也进行转化。
//旋转校正
float angle_rotation;
if ((box.size.width / box.size.height) < 1)
angle_rotation = 90 + box.angle;//正数,逆时针旋转
else
angle_rotation = box.angle; //负数,顺时针旋转
double scale = 0.78;//缩放比例
Mat rot_m = getRotationMatrix2D(box.center,angle_rotation,scale);//获得旋转矩阵
warpAffine(dstImg, dstImg, rot_m, dstImg.size());//仿射变换
参考资料:
上一篇: leetcode每日一题
下一篇: CSS3——3D变换