return 0;
}
【注】:
map_x和map_y:代表方针图中的(x,y)点在原图像的x坐标和y坐标;
文章插图
3仿射变换:
仿射变换是一个标的目的量空间进行一次线性变换并接上一个平移 , 变换为另一贯量空间的过程;
图像进行仿射变换后的特点:
①二维图像之间的相对位置关系连结不变 , 平行线依旧是平行线 , 且直线上的点的位置挨次连结不变;
②一个肆意的仿射变换都可以暗示为乘以一个矩阵(线性变换)接着再加上一个标的目的量(平移)的形式;
三种常见形式:
扭转-rotation(线性变换)
平移-translation(标的目的量加)
缩放-scale(线性变换)
文章插图
4仿射变换流程:
仿射变换素质是一个2* 3的矩阵M乘上原图的每个坐标 , 获得方针图的对应点坐标 。
2*3矩阵M中的2暗示方针点坐标的x与y , 3中的第三维是平移分量 。
是以需要做的就是找到矩阵M;
OpenCV供给 getAffineTransform 求出仿射变换 ,
getRotationMatrix2D 来获得扭转矩阵 。
这里简单说说仿射变换是怎么做到的 。
如下有两幅图像 , 图像二是图像一颠末放射转变得来的 。
那问题来了 , 我们怎么从这两个图像信息里挖掘出两图之间的映射关系?
只要在图像一种拿出三个点(1,2,3) ,
图像二也拿出对应的三个点(1,2,3) ,
就可以求出两图间的映射关系!
文章插图
5法式1
OpenCV经由过程两个函数的组合利用来实现仿射变换:
利用warpAffine来实现简单重映射
利用getRotationMatrix2D来获得扭转矩阵
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\features2d\features2d.hpp>
#include <opencv2\core\core.hpp>
using namespace std;
using namespace cv;
//仿射变换尝试
int main()
{
Mat src = https://vvvtt.com/article/imread("0.jpg");
Mat dst_warp, dst_warpRotateScale;
Point2f srcPoints[3];//原图中的三点
Point2f dstPoints[3];//方针图中的三点
//第一种仿射变换的挪用体例:三点法
//三个点对的值,只要知道变换后图的三个点坐标 , 就可实现仿射变换
srcPoints[0] = Point2f(0, 0);
srcPoints[1] = Point2f(0, src.rows - 1);
srcPoints[2] = Point2f(src.cols - 1, 0);
//映射后的三个坐标值
dstPoints[0] = Point2f(0, src.rows*0.3);
dstPoints[1] = Point2f(src.cols*0.25, src.rows*0.75);
dstPoints[2] = Point2f(src.cols*0.75, src.rows*0.25);
Mat M1 = getAffineTransform(srcPoints, dstPoints);//计较变换矩阵
推荐阅读
- 狗不理回应北京最后门店停业:是否重开还在考虑之中 只是结构调整
- 重启之极海听雷演员表 重启之极海听雷的演员表
- 小米手环2如何重置
- 王者荣耀顶号怎么重连
- 龙井鸡片汤
- Excel表格中如何去除重复的项
- 掀起两场重要战争的茶叶
- 重大卫生事件一级响应什么意思 重大卫生事件一级响应是什么意思
- 新手炒股需要了解股票基础知识,基础是重中之重
- 如何重新找回和加入已经退出的QQ群?