当前位置: 首页 > news >正文

OpenCV几何图像变换(5)旋转和缩放计算函数getRotationMatrix2D()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

计算二维旋转的仿射矩阵。
该函数计算以下矩阵:
[ α β ( 1 − α ) ⋅ center.x − β ⋅ center.y − β α β ⋅ center.x + ( 1 − α ) ⋅ center.y ] \begin{bmatrix} \alpha & \beta & (1- \alpha ) \cdot \texttt{center.x} - \beta \cdot \texttt{center.y} \\ - \beta & \alpha & \beta \cdot \texttt{center.x} + (1- \alpha ) \cdot \texttt{center.y} \end{bmatrix} [αββα(1α)center.xβcenter.yβcenter.x+(1α)center.y]
其中,
α = scale ⋅ cos ⁡ angle , β = scale ⋅ sin ⁡ angle \begin{array}{l} \alpha = \texttt{scale} \cdot \cos \texttt{angle} , \\ \beta = \texttt{scale} \cdot \sin \texttt{angle} \end{array} α=scalecosangle,β=scalesinangle
该变换将旋转中心映射到自身。如果不是目标,则调整平移。

getRotationMatrix2D() 函数用于计算一个 2×3 的仿射矩阵,该矩阵可以用于将图像绕着指定的中心点进行旋转和缩放。

函数原型


Mat cv::getRotationMatrix2D	
(Point2f 	center,double 	angle,double 	scale 
)		

参数

  • 参数center 旋转在源图像中的中心。
  • 参数angle 旋转角度(以度为单位)。正值表示逆时针旋转(坐标原点假定为图像的左上角)。
  • 参数scale 各向同性的缩放因子。

代码示例


#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{// 加载图像Mat src = imread("/media/dingxin/data/study/OpenCV/sources/images/fruit_small.jpg");if (src.empty()){cout << "Error: Image not found." << endl;return -1;}// 定义旋转中心Point2f center(src.cols / 2.0f, src.rows / 2.0f);// 定义旋转角度和缩放因子double angle = 45.0; // 旋转角度double scale = 1.0;  // 缩放因子// 获取旋转矩阵Mat rotMat = getRotationMatrix2D(center, angle, scale);// 应用旋转Mat rotatedImage;warpAffine(src, rotatedImage, rotMat, src.size());// 显示原图像和旋转后的图像namedWindow("Original Image", WINDOW_NORMAL);imshow("Original Image", src);namedWindow("Rotated Image", WINDOW_NORMAL);imshow("Rotated Image", rotatedImage);// 等待按键并关闭窗口waitKey(0);destroyAllWindows();return 0;
}

运行结果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux安装Miniconda3
  • 数学理论在编程中的核心应用与实践(上)
  • EmguCV学习笔记 VB.Net 6.3 轮廓外接多边形
  • C#(asp.net)乡镇中学宿舍管理系统---附源码 97861
  • OSPF路由原理详解与关键点
  • 20L水箱植保无人机技术详解
  • NVM安装管理node.js版本(简单易懂)
  • 微信左滑删除聊天记录怎么恢复?记录找回秘籍,第一种更有效!
  • 基于java图书销售管理系统设计与实现
  • Aurora IP核 —— NFC功能
  • Unity3D 屏幕空间阴影的简单优化详解
  • 【MySQL数据库管理问答题】第6章 管理 MySQL 用户
  • windows vs2022 MFC使用webview2嵌入网页
  • 大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
  • [ComfyUI]Flux+MiniCPM-V强强联手艺术创意,媲美GPT4V级国产多模态视觉大模型
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【译】理解JavaScript:new 关键字
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Android Studio:GIT提交项目到远程仓库
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Angular 响应式表单之下拉框
  • javascript 哈希表
  • Java比较器对数组,集合排序
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • VuePress 静态网站生成
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从零开始在ubuntu上搭建node开发环境
  • 服务器之间,相同帐号,实现免密钥登录
  • 高程读书笔记 第六章 面向对象程序设计
  • 马上搞懂 GeoJSON
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • MPAndroidChart 教程:Y轴 YAxis
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (2)nginx 安装、启停
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (6)STL算法之转换
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (C语言)字符分类函数
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • ./configure,make,make install的作用(转)
  • .NET CLR Hosting 简介
  • .Net Memory Profiler的使用举例
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • []sim300 GPRS数据收发程序
  • [2018-01-08] Python强化周的第一天
  • [ACM] hdu 1201 18岁生日