OpenCV学习笔记(九) 重映射、仿射变换
重映射
通过重映射来表达每个像素的位置 :
这里 是目标图像, 是源图像, 是作用于 的映射方法函数.想象一下我们有一个图像 , 我们想满足下面的条件作重映射:,图像会按照 轴方向发生翻转.
map_x.create( src.size(), CV_32FC1 );
map_y.create( src.size(), CV_32FC1 );
/* 计算map_x与map_y */
remap( src, dst, map_x, map_y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0,0, 0) );
- src: 源图像
- dst: 目标图像,与 src 相同大小
- map_x: x方向的映射参数. 它相当于方法 的第一个参数
- map_y: y方向的映射参数. 注意 map_y 和 map_x 与 src 的大小一致。
- CV_INTER_LINEAR: 非整数像素坐标插值标志. 这里给出的是默认值(双线性插值).
- BORDER_CONSTANT: 默认
map_x与map_y分别代表目标图中的(x,y)点在原图中的x坐标(由map_x提供)与y坐标(由map_y提供)。
仿射变换
仿射变换本质是一个2*3的矩阵M乘上原图的每个坐标,得到目标图的对应点坐标。2*3矩阵M中的2表示目标点坐标的x与y,3中的第三维是平移分量。因此需要做的就是找到矩阵M,OpenCV提供 getAffineTransform 求出仿射变换, getRotationMatrix2D 来获得旋转矩阵。
Point2f srcTri[3];
Point2f dstTri[3];Mat rot_mat( 2, 3, CV_32FC1 );
Mat warp_mat( 2, 3, CV_32FC1 );
Mat src, warp_dst, warp_rotate_dst;// 1. 找到对应点:原点+目标点
srcTri[0] = Point2f( 0,0 );
srcTri[1] = Point2f( src.cols - 1, 0 );
srcTri[2] = Point2f( 0, src.rows - 1 );dstTri[0] = Point2f( src.cols*0.0, src.rows*0.33 );
dstTri[1] = Point2f( src.cols*0.85, src.rows*0.25 );
dstTri[2] = Point2f( src.cols*0.15, src.rows*0.7 );// 2. 获得用以描述仿射变换的 2 x 3 矩阵 (在这里是 warp_mat)
warp_mat = getAffineTransform( srcTri, dstTri );
// 3. 将刚刚求得的仿射变换应用到源图像
warpAffine( src, warp_dst, warp_mat, warp_dst.size() );// 1. 设置旋转参数
Point center = Point( warp_dst.cols/2, warp_dst.rows/2 );//旋转图像所要围绕的中心
double angle = -50.0;// 旋转的角度. 在OpenCV中正角度是逆时针的
double scale = 0.6;//可选择: 缩放因子
// 2. 获得旋转矩阵, 这个函数返回一个 2 x 3 矩阵 (这里是 rot_mat)
rot_mat = getRotationMatrix2D( center, angle, scale );
// 3. 映射输出
warpAffine( warp_dst, warp_rotate_dst, rot_mat, warp_dst.size() );
转载于:https://www.cnblogs.com/ericxing/p/3580104.html
OpenCV学习笔记(九) 重映射、仿射变换相关推荐
- OpenCV学习笔记(九)——图像轮廓(下)
<OpenCV轻松入门:面向Python>学习笔记(九) 1-3 查找并绘制轮廓.矩特性及Hu矩 4-5 轮廓拟合及凸包 6. 利用形状场景算法比较轮廓 6.1 计算形状场景距离 6.2 ...
- OpenCV学习笔记九-Canny边缘检测
关于Canny边缘检测算法 Canny边缘检测算法主要是在其它边缘检测算子的基础上提出了改进,改进点在于提出了非极大值抑制和阈值检测.非极大值抑制消除了非边缘的但是梯度值较大的点,阈值检测使得不连续的 ...
- Opencv学习笔记(八) -- 图像色彩空间转换
1.常见图像色彩空间 RGB RGB色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红.绿.蓝三个通道 ...
- OpenCV学习笔记(十四):重映射:remap( )
OpenCV学习笔记(十四):重映射:remap( ) 图像的坐标映射是通过原图像与目标图像之间建立一种映射关系,这种映射关系有两种,一种是计算原图像任意像素在映射后图像的坐标位置,另一种是计算变换后 ...
- OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D()
OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D() 一个任意的仿射变换都能表示为乘以一个矩阵(线性变换)接着再加上一个向量(平移)的形式. ...
- OpenCV学习笔记(六)(七)(八)(九)(十)
OpenCV学习笔记(六)--对XML和YAML文件实现I/O操作 1. XML.YAML文件的打开和关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: [c ...
- OpenCV学习笔记(九): 漫水填充:floodFill()
OpenCV学习笔记(九): 漫水填充:floodFill() 定义: 漫水填充法是一种用特定的颜色填充联通区域(自动选中了和种子点相连的区域,接着将该区域替换成指定的颜色)通过设置可连通像素的上下限 ...
- OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast
OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...
- OpenCV学习笔记与代码示例(三):张氏标定法标定相机原理及函数详解
目录 1.张氏标定法基本原理 1.1相机针孔模型 1.2单应矩阵H 1.3求相机内参 1.4求相机外参 1.5优化参数 1.6总结 2.OpenCV实现 2.1特征点检测与靶标坐标初始化 2.2相机标 ...
- python做直方图-python OpenCV学习笔记实现二维直方图
本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...
最新文章
- 能使曲线变平滑的一维滤波器_音响电源滤波器有什么作用?有人说能提升音质!你信不信?...
- python 魔法函数 运行时_16个python常用魔法函数
- 各种字符串分拆处理函数.sql
- python机器学习之分类器
- vc2010中开始执行不调试灰的_反编译动态调试smali全过程
- Web内核微信小程序框架实践
- [leetcode]106.从中序与后序遍历序列构造二叉树
- IBM软件OEM概览
- jq 方法函数(淡入淡出,查找元素,过滤)遍历
- 【Matlab】扩展卡尔曼滤波器原理及仿真(初学者入门专用)
- 响应式建筑设计类dedecms模板
- Java突击学习 Day1
- 计算机360u盘删除,如何删除U盘在电脑中的使用痕迹
- 红帽子linux装mysql_红帽学习之Linux安装
- RRZCMS安全防护建议
- 企业微信发送信息异常的临时处理方案
- 家庭无线网络桥接扩展方案
- 如何在网页中插入视频
- MindManager教你做一份完美的笔记
- SpringBoot集成移动云MAS平台(SDK版本)