千家信息网

OpenCV图像旋转Rotate的方法

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,这篇文章主要介绍"OpenCV图像旋转Rotate的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"OpenCV图像旋转Rotate的方法"文章能帮助大家解
千家信息网最后更新 2024年11月18日OpenCV图像旋转Rotate的方法

这篇文章主要介绍"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参数说明

  • 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 #include 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的方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0