OpenCV-图像旋转Rotate

简介: 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参数说明

  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°

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


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


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

相关文章
|
8天前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.6、图像旋转与翻转(rotate函数、imutils环境安装、imutils任意角度旋转)
OpenCV这么简单为啥不学——1.6、图像旋转与翻转(rotate函数、imutils环境安装、imutils任意角度旋转)
44 0
|
11月前
|
计算机视觉 C++ Python
OpenCV入门(C++/Python)- 使用OpenCV进行图像旋转和转换(五)
OpenCV入门(C++/Python)- 使用OpenCV进行图像旋转和转换(五)
201 0
|
计算机视觉
OpenCV学习笔记(四)【图像旋转】
OpenCV学习笔记(四)【图像旋转】
OpenCV学习笔记(四)【图像旋转】
|
计算机视觉
使用 OpenCV 进行图像旋转和平移
使用 OpenCV 进行图像旋转和平移
329 0
|
6天前
|
算法 计算机视觉
OpenCV高斯差分技术实现图像边缘检测
OpenCV高斯差分技术实现图像边缘检测
|
8天前
|
计算机视觉
OpenCV图像运动模糊
OpenCV图像运动模糊
11 0
|
8天前
|
计算机视觉
OpenCV图像阈值
OpenCV图像阈值
5 0
|
8天前
|
计算机视觉
OpenCV图像混合
OpenCV图像混合
9 0
|
8天前
|
计算机视觉 Python
OpenCV为图像扩边(填充)
OpenCV为图像扩边(填充)
10 0