OpenCV-图像旋转Rotate

Posted 翟天保Steven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV-图像旋转Rotate相关的知识,希望对你有一定的参考价值。

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

功能函数

// 图像旋转
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参数说明

  1. Point2f类型的center,旋转中心。
  2. double类型的angle,逆时针旋转的角度。
  3. 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参数说明

  1. InputArray类型的src,输入图像。
  2. OutputArray类型的dst,输出图像。
  3. InputArray类型的M,仿射变换矩阵。
  4. Size类型的dsize,输出图像的大小。
  5. int类型的flags,插值方法。
  6. int类型的borderMode,边界填充方法。
  7. 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;

测试效果

图1 原图
图2 旋转30°
图3 原图大小旋转45°

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

       如果函数有什么可以改进完善的地方,非常欢迎大家指出,一同进步何乐而不为呢~

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

以上是关于OpenCV-图像旋转Rotate的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV-图像旋转Rotate

matlab图像旋转怎么操作?

OpenCV利用矩阵实现图像旋转

OpenCV 完整例程28. 图像的旋转(直角旋转)

使用OpenCV对图像进行两种平移操作(图像的尺寸变化与图像的尺寸不变)

图像处理基于OpenCV底层实现的图片旋转