OpenCV图像旋转Rotate的详细介绍
作者:翟天保Steven 时间:2023-07-01 08:22:27
功能函数
// 图像旋转
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
不难看出,旋转后原图的尺寸已经无法满足图像要求了,此时可以缩小比例,也可以扩展整图尺寸使其完全覆盖。
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
来源:https://blog.csdn.net/zhaitianbao/article/details/124516085
标签:OpenCV,旋转,Rotate
0
投稿
猜你喜欢
SpringBoot AOP AspectJ切面技术介绍与实现方式
2022-12-27 22:03:53
Android编程实现图片平铺的方法分析
2022-05-27 06:37:40
C# 文件下载之断点续传实现代码
2021-05-24 15:37:02
Android实现界面内嵌多种卡片视图(ViewPager、RadioGroup)
2023-03-06 15:48:31
android图片处理之让图片一直匀速旋转
2021-07-13 02:33:38
Android序列化接口Parcelable与Serializable接口对比
2023-03-24 17:48:59
MyBatis Plus插件机制与执行流程原理分析详解
2021-10-09 20:53:48
SpringBoot整合MyCat实现读写分离的方法
2022-03-05 23:37:45
Android实现锁屏荧光效果
2023-09-02 03:12:03
Java实现将图片上传到webapp路径下 路径获取方式
2023-07-10 12:44:13
Android getevent用法实例详解
2021-06-27 10:03:35
总结C#删除字符串数组中空字符串的几种方法
2022-04-14 03:26:42
Spring Boot MQTT Too many publishes in progress错误的解决方案
2023-06-27 02:16:44
JDK源码之Vector与HashSet解析
2021-09-06 10:47:23
Android中Splash应用启动白屏问题的解决方法
2022-08-25 14:24:33
C#进程监控方法实例分析
2021-09-16 03:25:47
Android 7.0开发获取存储设备信息的方法
2022-05-24 01:04:57
Java通过SSM完成水果商城批发平台流程
2023-01-04 01:32:04
关于maven:pom文件的使用解析
2022-02-08 06:21:41
eclipse+maven+spring mvc项目基本搭建过程
2022-12-18 03:50:52