欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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轮廓篇--旋转矩形矫正

其实观点点就是我们定义的长和宽和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());//仿射变换

 参考资料:

https://blog.csdn.net/weixin_40647819/article/details/80884594?depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromMachineLearnPai2-6&utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromMachineLearnPai2-6

https://blog.csdn.net/kakiebu/article/details/79114964

相关标签: opencv轮廓