getRotationMatrix2D()函数用于计算旋转矩阵和warpAffine()函数用于实现图像的仿射变换

Mat getRotationMatrix2D( Point2f center, double angle, double scale );
  • center:图像旋转的中心位置。
  • angle:图像旋转的角度,单位为度,正值为逆时针旋转。
  • scale:两个轴的比例因子,可以实现旋转过程中的图像缩放,不缩放输入1。

warpAffine()函数进行仿射变换

void cv::warpAffine(InputArray src,OutputArray dst,InputArray M,Size dsize,int  flags = INTER_LINEAR,int  borderMode = BORDER_CONSTANT,const Scalar& borderValue = Scalar()
)
  • src:输入图像。
  • dst:仿射变换后输出图像,与src数据类型相同,但是尺寸与dsize相同。
  • M:2×3的变换矩阵。
  • dsize:输出图像的尺寸。
  • flags:插值方法标志,可选参数及含义在表3-3和表3-4中给出。
  • borderMode:像素边界外推方法的标志。
  • borderValue:填充边界使用的数值,默认情况下为0

根据旋转矩阵和平移矩阵以及图像像素值,仿射变换的数学原理

Mat getAffineTransform( const Point2f src[], const Point2f dst[] );
  • src[]:原图像中的三个像素坐标。
  • dst[]:目标图像中的三个像素坐标。

该函数两个输入量都是存放浮点坐标的数组,在生成数组的时候像素点的输入顺序无关,但是需要保证像素点的对应关系,函数的返回值是一个2×3的变换矩阵。

简单示例

//
// Created by smallflyfly on 2021/6/9.
//#include "opencv2/opencv.hpp"
#include "opencv2/highgui.hpp"#include <iostream>using namespace cv;
using namespace std;int main() {Mat im = imread("test.jpg");resize(im, im, Size(0, 0), 0.5, 0.5);imshow("im", im);Mat r1;double angle = 30.0;Size size(im.cols, im.rows);Point2f center(im.rows / 2.0, im.cols / 2.0);r1 = getRotationMatrix2D(center, angle, 1);Mat warp;warpAffine(im, warp, r1, size);imshow("warp1", warp);// 根据三个点进行仿射Point2f srcPoints[3];Point2f dstPoints[3];//src image 3 pointssrcPoints[0] = Point2f(0, 0);srcPoints[1] = Point2f(0, im.cols-1);srcPoints[2] = Point2f(im.rows-1, im.cols-1);// dst image 3 pointsdstPoints[0] = Point2f(im.rows * 0.2, im.cols * 0.2);dstPoints[1] = Point2f(im.rows * 0.1, im.cols * 0.7);dstPoints[2] = Point2f(im.rows * 0.9, im.cols * 0.7);r1 = getAffineTransform(srcPoints, dstPoints);warpAffine(im, warp, r1, size);imshow("warp", warp);waitKey(0);destroyAllWindows();return 0;
}

OpenCV——仿射变换相关推荐

  1. OpenCV仿射变换 SURF特征点描述合辑

    原文:http://blog.csdn.net/poem_qianmo/article/details/33320997?utm_source=tuicool&utm_medium=refer ...

  2. OpenCV仿射变换Affine Transformations

    OpenCV仿射变换Affine Transformations 仿射变换Affine Transformations 目标 理论 什么是仿射变换? 我们如何获得仿射变换? 代码 这个程序做什么? 解 ...

  3. opencv仿射变换:平移,缩放和旋转

    目录 仿射变换原理 opencv中仿射变换实现 使用getAffineTransform()函数求仿射变换矩阵 使用 getRotationMatrix2D()函数获取仿射矩阵 使用仿射矩阵对图像做仿 ...

  4. OpenCV仿射变换--平移

    OpenCV仿射变换--平移 OpenCV仿射变换--平移 OpenCV仿射变换--平移 公式及原理 OpenCV函数 实现代码 代码执行效果 公式及原理 定义原坐标为(x,y),平移后(xoffec ...

  5. opencv仿射变换

    API函数 1.获取仿射矩阵 (1)getAffineTransform       //设置原图像与目标图像上三点计算矩阵 Mat A=getAffineTransform(const Point2 ...

  6. opencv 仿射变换与透视变换详解

    常见的2D图像变换从原理上讲主要包括基于2×3矩阵的仿射变换和基于3×3矩阵透视变换. 仿射变换 原理 基本的图像变换就是二维坐标的变换:从一种二维坐标(x,y)到另一种二维坐标(u,v)的线性变换: ...

  7. (三) OpenCV仿射变换与透射变换(Affine and Perspective Transform)

    图像最基本的变换即仿射变换(Affine Transform)和透射变换(Perspective Transform).仿射变换是对一个向量空间进行一次线性变换并接上一次平移.透射变换是中心投影的射影 ...

  8. opencv仿射变换和透视变换门牌号实践总结

    前几日在门牌号识别优化过程中发现当摄像头拍摄角度倾斜或者相机仰头拍摄出来的门牌号发生了畸变,即使能够找到门牌号区域也大大降低了识别的准确度,因此想到了倾斜矫正--仿射变换和透视变换,关于这两个概念网上 ...

  9. OpenCV 仿射变换

    图像的仿射变换涉及到图像的形状位置角度的变化,是深度学习预处理中常到的功能,仿射变换主要是对图像的缩放,旋转,翻转和平移等操作的组合. 仿射变换:一个任意的仿射变换都能表示为 乘以一个矩阵 (线性变换 ...

最新文章

  1. 新建ROS工作工作空间
  2. c语言循环控制答案,C语言程序设计 实四 循环控制 答案 《西北民大 电气院》.doc...
  3. JavaScript Table排序
  4. Win7 安装资料及教程
  5. 不知道读什么好?这 16 篇最新论文,帮你轻松积攒知识点
  6. 曹大带我学 Go(11)—— 从 map 的 extra 字段谈起
  7. RAPI简单说明及Sample Code
  8. 龙芯.NET正式发布 稳步推进生态建设
  9. python3 struct.pack方法报错argument for 's' must be a bytes object
  10. 计算机图形学大几学的,计算机图形学大作业-WenhaoYu.PDF
  11. 2013.8.4thinkPHp学习
  12. C++里vector::erase函数
  13. HIVE大数据出现倾斜怎么办
  14. 网易云音乐获取音频链接(爬虫)破解params参数
  15. 史上最全破解安卓APK和反编译
  16. qemu安卓版免root_用qemu运行一个小小Linux系统
  17. Hibernate 的 HHH90000022 警告
  18. 用diiv实现多个方块居中嵌套--margin
  19. StringBuffer去掉最后一个字符
  20. 谷歌浏览器插件被禁用 浏览器组策略配置

热门文章

  1. 气传导蓝牙耳机排行榜,2023年气传导耳机推荐这几款
  2. 第 46 章 设置 FLASH 的读写保护及解除
  3. 【安卓手机】如何解决wifi被拉黑,连不上WiFi
  4. ARIMA基本概念和流程讲解
  5. 怎么改mnist数据的标签_MNIST数据处理
  6. 彻底弄懂什么是大小端
  7. AI绘图实战(七):室内设计线稿渲染、景观设计手绘稿改动、建筑照片转线稿|Stable Diffusion成为设计师生产力工具
  8. Postgresql杂谈 23——Postgresql中的全文检索
  9. DPDK - 通过源码安装dpdk并运行examples (by quqi99)
  10. 网络工程师试题(一)-2020-12-7