OpenCV图像旋转Rotate的详细介绍

 更新时间:2022年05月01日 10:10:20   作者:翟天保Steven  
这篇文章主要介绍了OpenCV图像旋转Rotate,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

功能函数

// 图像旋转
void Rotate(const cv::Mat &srcImage, cv::Mat &dstImage, double angle, cv::Point2f center, double scale)
{
	cv::Mat M = cv::getRotationMatrix2D(center, angle, scale);//计算旋转的仿射变换矩阵 
	cv::warpAffine(srcImage, dstImage, M, cv::Size(srcImage.cols, srcImage.rows));//仿射变换  
}

 getRotationMatrix2D函数原型

getRotationMatrix2D用来获得旋转的仿射变换矩阵。

Mat getRotationMatrix2D(Point2f center, double angle, double scale);

getRotationMatrix2D参数说明

  • Point2f类型的center,旋转中心。
  • double类型的angle,逆时针旋转的角度。
  • double类型的scale,图像旋转后的尺寸比例。

warpAffine函数原型

warpAffine用来仿射变换。

void warpAffine( InputArray src, OutputArray dst,
                 InputArray M, Size dsize,
                 int flags = INTER_LINEAR,
                 int borderMode = BORDER_CONSTANT,
                 const Scalar& borderValue = Scalar());

warpAffine参数说明

  • InputArray类型的src,输入图像。
  • OutputArray类型的dst,输出图像。
  • InputArray类型的M,仿射变换矩阵。
  • Size类型的dsize,输出图像的大小。
  • int类型的flags,插值方法。
  • int类型的borderMode,边界填充方法。
  • const Scalar&类型的borderValue,边界填充数值。

C++测试代码

#include <iostream>
#include <opencv.hpp>
using namespace std;
using namespace cv;
// 图像旋转
void Rotate(const cv::Mat &srcImage, cv::Mat &dstImage, double angle, cv::Point2f center, double scale)
{
	cv::Mat M = cv::getRotationMatrix2D(center, angle, scale);//计算旋转的仿射变换矩阵 
	cv::warpAffine(srcImage, dstImage, M, cv::Size(srcImage.cols, srcImage.rows));//仿射变换  
}
int main()
{
	// 载入图像
	cv::Mat src = imread("0.jpg");
	cv::Mat dst;
	// 定义参数
	int row = src.rows;
	int col = src.cols;
	double angle = 30;
	cv::Point2f center(col / 2, row / 2);
	double scale = 0.5;
	// 图像旋转
	Rotate(src, dst, angle, center, scale);
	// 显示图像
	imshow("src", src);
	imshow("result", dst);
	waitKey(0);
	system("pause");
	return 0;
}

测试效果

图原图

图2 旋转30°

图3原图大小旋转45

不难看出,旋转后原图的尺寸已经无法满足图像要求了,此时可以缩小比例,也可以扩展整图尺寸使其完全覆盖。

到此这篇关于OpenCV图像旋转Rotate的文章就介绍到这了,更多相关OpenCV图像旋转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

相关文章

  • MFC串口通信发送16进制数据的方法

    MFC串口通信发送16进制数据的方法

    这篇文章主要为大家详细介绍了MFC串口通信发送16进制数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C++中用两个标准容器stack,实现一个队列的方法详解

    C++中用两个标准容器stack,实现一个队列的方法详解

    本篇文章是对C++中使用两个标准容器stack,实现一个队列的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 用typedef定义类型详细总结

    用typedef定义类型详细总结

    用typedef可以声明各种类型名,但不能用来定义变量,用typedef可以声明数组类型、字符串类型、使用比较方便
    2013-10-10
  • C语言实现学生宿舍信息管理系统课程设计

    C语言实现学生宿舍信息管理系统课程设计

    这篇文章主要为大家详细介绍了C语言实现学生宿舍信息管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++中stringstream的用法和实例

    C++中stringstream的用法和实例

    下面小编就为大家带来一篇C++中stringstream的用法和实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C++基于QWidget和QLabel实现图片缩放,拉伸与拖拽

    C++基于QWidget和QLabel实现图片缩放,拉伸与拖拽

    这篇文章主要为大家详细介绍了C++如何基于QWidget和QLabel实现图片缩放、拉伸与拖拽等功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • C语言入门篇--关键字static详解

    C语言入门篇--关键字static详解

    本篇文章是C语言系列基础篇,C语言中,static是用来修饰变量和函数:1.修饰局部变量–>静态局部变量2.修饰全局变量–>静态全局变量3.修饰函数–>静态函数
    2021-08-08
  • 浅谈C语言转义字符和格式控制符

    浅谈C语言转义字符和格式控制符

    下面小编就为大家带来一篇浅谈C语言转义字符和格式控制符。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • C++详细讲解图论的基础与图的储存

    C++详细讲解图论的基础与图的储存

    图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系
    2022-05-05
  • c语言文件读写示例(c语言文件操作)

    c语言文件读写示例(c语言文件操作)

    这篇文章主要介绍了c语言文件读写示例(c语言文件操作),需要的朋友可以参考下
    2014-02-02

最新评论