OpenCV中的仿射变换

仿射变换:一个任意的仿射变换都能表示为 乘以一个矩阵 (线性变换) 接着再 加上一个向量 (平移).
通常一个图像有三种变换:
1、旋转
2、平移
3、缩放
通常用2X3的矩阵来表示一个仿射变换:

变换矩阵A=[a11a12a21a22]变换矩阵A=\begin{bmatrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{bmatrix}变换矩阵A=[a11​a21​​a12​a22​​]
平移变化M=[txty]平移变化M=\begin{bmatrix} t_x\\t_y \end{bmatrix}平移变化M=[tx​ty​​]
通常将两个变换合为一个:仿射变换矩阵T=[a11a12txa21a22ty]仿射变换矩阵T=\begin{bmatrix}a_{11}&a_{12}&t_x\\a_{21}&a_{22}&{t_y} \end{bmatrix}仿射变换矩阵T=[a11​a21​​a12​a22​​tx​ty​​]
假设原坐标为(x原,y原)(x_原,y_原)(x原​,y原​)经过仿射变换:
[x新y新]=[a11a12a21a22]∗[x原y原]+[txty]\begin{bmatrix}x_新\\y_新 \end{bmatrix}=\begin{bmatrix} a_{11}&a_{12}\\a_{21}&a_{22}\end{bmatrix}*\begin{bmatrix}x_原\\y_原 \end{bmatrix}+\begin{bmatrix}t_x\\t_y \end{bmatrix}[x新​y新​​]=[a11​a21​​a12​a22​​]∗[x原​y原​​]+[tx​ty​​]
以上为仿射变换的分步。
直接使用仿射变换矩阵T:
[x新y新]=[a11a12txa21a22ty]∗[x原y原1]\begin{bmatrix} x_新\\y_新\end{bmatrix}=\begin{bmatrix}a_{11}&a_{12}&t_x\\a_{21}&a_{22}&{t_y} \end{bmatrix}*\begin{bmatrix}x_原\\y_原\\1\end{bmatrix}[x新​y新​​]=[a11​a21​​a12​a22​​tx​ty​​]∗⎣⎡​x原​y原​1​⎦⎤​

下面是几个函数的API:
利用变换前的点和变换后的点求出仿射变换矩阵:

getAffineTransform(原图像的点的集合,变换后的图像的点的集合
);

利用旋转角度和缩放比例来求出仿射变换矩阵:

getRotationMatrix2D(中心点,旋转角度,缩放比例
);

最后根据仿射变换矩阵对图像进行操作:

warpAffine(输入图像,输出图像,仿射变换矩阵,原图像.size()
);
#include "opencv2/opencv.hpp"
#include <iostream>using namespace std;
using namespace cv;int main()
{Mat test = Mat::zeros(500,500,CV_8UC3);imshow("test",test);Point2f p[3];Point2f q[3];p[0] = Point2f(200,300);p[1] = Point2f(400,100);p[2] = Point2f(70,80);line(test,p[0],p[1],Scalar(255,255,255),3,8);line(test,p[0],p[2],Scalar(255,255,255),3,8);line(test,p[2],p[1],Scalar(255,255,255),3,8);q[0] = Point2f(300,300);q[1] = Point2f(500,100);q[2] = Point2f(170,80);line(test,q[0],q[1],Scalar(255,255,255),3,8);line(test,q[0],q[2],Scalar(255,255,255),3,8);line(test,q[2],q[1],Scalar(255,255,255),3,8);Mat tr = getAffineTransform(p,q);cout << tr << endl;imshow("test",test);Mat src = imread("/home/dynamicw/Project/C++_Project/opencvtest/src/lesson01/source/map.png");Mat dst;Point center = Point(src.cols/2,src.rows/2);double angle = -50.0;double scale = 0.6;tr = getRotationMatrix2D(center,angle,scale);warpAffine(src,dst,tr,src.size());imshow("dst",dst);waitKey(0);return 0;
}

OpenCV中的仿射变换相关推荐

  1. OpenCV中的透视变换介绍

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 透视变换原理 透视变换是将图像从一个视 ...

  2. opencv中mean函数耗时_使用OpenCV进行人脸对齐

    在人脸识别项目中,如果图片中人脸的方向各不一样且相差很大,这样会影响人脸识别的准确率.所以在实际人脸检测项目中,在人脸识别的前一步往往会先进行人脸对齐.人脸对齐可以看作是数据normalization ...

  3. OpenCV中cv2的用法

    OpenCV中cv2的用法 一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志  cv2.IMR ...

  4. OpenCV中图像旋转(warpAffine)算法的实现过程

    在OpenCV中,目前并没有现成的函数直接用来实现图像旋转,它是用仿射变换函数cv::warpAffine来实现的,此函数目前支持4种插值算法,最近邻.双线性.双三次.兰索斯插值,如果传进去的参数为基 ...

  5. OpenCV中的「透视变换 / 投影变换 / 单应性」—cv.warpPerspective、cv.findHomography

    文章目录 引言 透视变换(projective transform) 单应性(Homography) opencv代码 仿射变换相关函数 投影变换相关的函数 鸟瞰图代码示例 小结 引言 图像的几何变换 ...

  6. OpenCV中文文档4.0.0学习笔记(更新中……)

    系列文章目录 文章目录 系列文章目录 前言 一.简介 1.OpenCV-Python教程简介 2.OpenCV-Python 3.OpenCV-Python教程 4.OpenCV 需要你!!! 二.G ...

  7. [OpenCV实战]39 在OpenCV中使用ArUco标记的增强现实

    文章目录 1 什么是ArUco标记? 2 在OpenCV中生成ArUco标记 3 检测Aruco标记 4 增强现实应用 5 总结和代码 5.1 生成aruco标记 5.2 使用aruco增强现实 6 ...

  8. OpenCV中图像特征提取与描述

    目录 图像特征提取与描述 图像的特征 Harris和Shi-Tomas算法 Harris角点检测 Shi-Tomasi角点检测 小结 SIFT/SURF算法 SIFT原理 基本流程 尺度空间极值检测 ...

  9. 第四章:OpenCV中的图像处理

    第四章:OpenCV中的图像处理 本章节你将学习图像的改变色彩空间.提取对象.图像的几何变换.图像的阈值.平滑图像等OpenCV图像处理的基本内容. 更多内容请关注我的GitHub库:TonyStar ...

最新文章

  1. Ant Design 被删代码已恢复,现登顶 GitHub Trending Top 2
  2. openssl生成rsa密钥对和密钥格式转换
  3. 小程序f2自定义html,微信小程序个人产品添加上传样式设计制作开发教程(2)
  4. python 时间序列异常值_python中缺少时间序列值
  5. python中以下关于列表描述错误的_在Python中,以下关于函数的描述错误的是哪一项?...
  6. FreeBSD6.1学习笔记[转]
  7. java虚拟机-d参数配置_JVM虚拟机参数介绍
  8. mysql 碎片率_为什么所有MySQL InnoDB表都碎片化了?
  9. UE4 蓝图教程(一) 开始,一个转动的香蕉
  10. 差点被威金病毒搞死了……
  11. llq考试 圣诞欢乐赛 (第二发)
  12. linux脚本echo off,echo什么意思_@echo off的作用 - 编程语言及工具 - 电子发烧友网
  13. (升级版)基本粒子结构以及宇宙现象的徦说
  14. HaploMerger2: 从高杂合二倍体基因组组装中重建单倍型
  15. Qt数据库应用19-图片转pdf
  16. Qt网络编程电子白板
  17. python 仪表驱动_技术文章 | 锐视模块化仪器python驱动使用说明
  18. 人心难测——远离垃圾人
  19. linux shell脚本 nohup,linux真正使用shell脚本做定时任务 关键的Nohup
  20. 固定资产折旧计算的方法[轉帖]

热门文章

  1. 【活动预告】“智能医疗技术应用”线上论坛
  2. 地方政府大数据发展的现实与理想
  3. “通信大数据”征文通知
  4. 【计算机网络】比较TCP与UDP
  5. 简析多种编码方式(Hex, Base64, UTF-8)
  6. 区块链企业级解决方案 ( Hyperledger )
  7. 手把手带你搭建Mvp+Dagger架构
  8. 写在 2019 年后的蚂蚁、头条、拼多多的面试总结
  9. Nodejs创建简单的Bot
  10. nagios安装配置pnp4nagios-0.6.6