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
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

相关文章

  • 基于Qt实现日志打印系统

    基于Qt实现日志打印系统

    这篇文章主要为大家详细介绍了如何利用Qt开发一个日志打印系统,可以实现打印日志按日期、大小保存,过期删除,窗口实时显示日志,网络传输日志远程调试,需要的可以参考下
    2023-12-12
  • C语言解数独程序的源码

    C语言解数独程序的源码

    这篇文章主要为大家详细介绍了C语言解数独程序的源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C语言中的分支循环其嵌套语句

    C语言中的分支循环其嵌套语句

    这篇文章主要介绍了C语言中的分支循环其嵌套语句,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C语言 const修饰普通变量和指针的操作代码

    C语言 const修饰普通变量和指针的操作代码

    这篇文章主要介绍了C语言const修饰普通变量和指针,用const修饰普通变量时,是在语法层面限制了变量的修改,但是本质上,变量还是变量,是一种不能被修改的变量,本文通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • C语言实现电话簿项目

    C语言实现电话簿项目

    这篇文章主要为大家详细介绍了C语言实现电话簿项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • C语言实现计算树的深度的方法

    C语言实现计算树的深度的方法

    这篇文章主要介绍了C语言实现计算树的深度的方法,针对数据结构中树进行操作的方法,在算法设计中比较常见,需要的朋友可以参考下
    2014-09-09
  • C++计算图任意两点间的所有路径

    C++计算图任意两点间的所有路径

    这篇文章主要为大家详细介绍了C++求图任意两点间的所有路径 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • C++实现职工工资管理系统

    C++实现职工工资管理系统

    这篇文章主要为大家详细介绍了C++实现简单的职工工资管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C/C++内存泄漏原因分析与应对方法

    C/C++内存泄漏原因分析与应对方法

    内存泄漏会导致当前应用程序消耗更多的内存,使得其他应用程序可用的内存更少了,那么为什么会内存泄漏,我们应该怎样应对内存泄漏,所以接下来就给大家详细介绍一下C++内存泄漏原因分析与应对方法,需要的朋友可以参考下
    2023-07-07
  • C++实现PatchMatch图像修复算法

    C++实现PatchMatch图像修复算法

    这篇文章主要介绍了C++实现PatchMatch图像修复算法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04

最新评论