【OpenCV 】Remapping 重映射¶
目录
1.1目标
1.2 理论
1.3 代码
1.4 运行结果
1.1目标
展示如何使用OpenCV函数 remap 来实现简单重映射.
1.2 理论
把一个图像中一个位置的像素放置到另一个图片指定位置的过程.
为了完成映射过程, 有必要获得一些插值为非整数像素坐标,因为源图像与目标图像的像素坐标不是一一对应的.
我们通过重映射来表达每个像素的位置 :
这里 是目标图像, 是源图像, 是作用于 的映射方法函数.
让我们来思考一个快速的例子. 想象一下我们有一个图像 , 我们想满足下面的条件作重映射:
会发生什么? 图像会按照 轴方向发生翻转. 例如, 源图像如下:
看到红色圈关于 x 的位置改变( 轴水平翻转):
通过 OpenCV 的函数 remap 提供一个简单的重映射实现.
1.3 代码
本程序做什么?
装载一幅图像.
程序按秒循环, 在一个窗口中顺序出现4种重映射过程对相同的图像.
等待用户按 ‘ESC’ 键退出程序。
下面是本教程代码. 你也可以从 这里 下载。
#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>#include <stdio.h>
using namespace cv;
/// Global variablesMat src, dst;Mat map_x, map_y;char* remap_window = "Remap demo";int ind = 0;
/// Function Headersvoid update_map( void );
/*** @function main*/int main( int argc, char** argv ){/// Load the imagesrc = imread( argv[1], 1 );
/// Create dst, map_x and map_y with the same size as src:dst.create( src.size(), src.type() );map_x.create( src.size(), CV_32FC1 );map_y.create( src.size(), CV_32FC1 );
/// Create windownamedWindow( remap_window, CV_WINDOW_AUTOSIZE );
/// Loopwhile( true ){/// Each 1 sec. Press ESC to exit the programint c = waitKey( 1000 );
if( (char)c == 27 ){ break; }
/// Update map_x & map_y. Then apply remapupdate_map();remap( src, dst, map_x, map_y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0,0, 0) );
/// Display resultsimshow( remap_window, dst );}return 0;}
/*** @function update_map* @brief Fill the map_x and map_y matrices with 4 types of mappings*/void update_map( void ){ind = ind%4;
for( int j = 0; j < src.rows; j++ ){ for( int i = 0; i < src.cols; i++ ){switch( ind ){case 0:if( i > src.cols*0.25 && i < src.cols*0.75 && j > src.rows*0.25 && j < src.rows*0.75 ){map_x.at<float>(j,i) = 2*( i - src.cols*0.25 ) + 0.5 ;map_y.at<float>(j,i) = 2*( j - src.rows*0.25 ) + 0.5 ;}else{ map_x.at<float>(j,i) = 0 ;map_y.at<float>(j,i) = 0 ;}break;case 1:map_x.at<float>(j,i) = i ;map_y.at<float>(j,i) = src.rows - j ;break;case 2:map_x.at<float>(j,i) = src.cols - i ;map_y.at<float>(j,i) = j ;break;case 3:map_x.at<float>(j,i) = src.cols - i ;map_y.at<float>(j,i) = src.rows - j ;break;} // end of switch}}ind++;
}
1.4 运行结果
【OpenCV 】Remapping 重映射¶相关推荐
- OpenCV之imgproc 模块. 图像处理(3)霍夫线变换 霍夫圆变换 Remapping 重映射 仿射变换
霍夫线变换 目标 在这个部分您将学习到: 使用OpenCV的以下函数 HoughLines 和 HoughLinesP 来检测图像中的直线. 原理 Note 以下原理的说明来自书籍 学习OpenCV ...
- OpenCV中重映射
OpenCV中图像重映射 重映射的意思是:把一个图像中一个位置的像素放置到另一个图片指定位置的过程.新图像g(x,y)g(x,y)g(x,y)与原图像f(x,y)f(x,y)f(x,y)存在一个映射的 ...
- 【OpenCV】重映射及仿射变换
重映射Remapping void cv::remap ( InputArray src, OutputArray dst,InputArray map1, InputArray map2,int i ...
- opencv之重映射remap
重映射指把一个图像中的一个位置的像素通过映射关系转换到另一图像的指定位置. 正映射:计算原图像任意像素在映射后图像中的坐标位置. 反映射:计算变换后图像任意像素反映射在原图像中的坐标位置. 通常 由于 ...
- OpenCV图像处理——重映射 remap函数
在<学习OpenCV3,O'Reilly系列丛书>中的第11章常见的图像变换中讲到的"任意映射",Remap函数.函数cv::remap通常用来纠正校准的立体图像,包括 ...
- 【OpenCV入门教程之十七】OpenCV重映射 SURF特征点检测合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨) ...
- opencv mat赋值_【3】OpenCV图像处理模块(18)重映射
本例中使用OpenCV的remap()函数实现简单的图像重映射(remapping). 什么是重映射? 将一幅图像中的像素,改变位置得到一副新的图像,如图像缩放.翻转等. 因为源图像和新图像之间不一定 ...
- OpenCV探索之路(八):重映射与仿射变换
重映射 重映射就是把一幅图像中某个位置的像素放置到另一个图片中指定位置的过程. 用一个数学公式来表示就是: 其中的 f 就是映射方式,也就说,像素点在另一个图像中的位置是由 f 来计算的. 在Open ...
- OpenCV学习笔记(十四):重映射:remap( )
OpenCV学习笔记(十四):重映射:remap( ) 图像的坐标映射是通过原图像与目标图像之间建立一种映射关系,这种映射关系有两种,一种是计算原图像任意像素在映射后图像的坐标位置,另一种是计算变换后 ...
最新文章
- CSS布局之品字布局
- python对文件的读操作方法有哪些-Python文件操作实例大全
- Nginx(二):反向代理原理 与 配置文件详解
- 在HTML5网页中写法正确的是,跟永哥学HTML5(4):正确使用HTML5的header、hgroup和section...
- Django web开发系列(五)模板
- 学成在线--9.页面静态化
- 贪婪算法在求解最小生成树中的应用(JAVA)--Kruskal算法
- 专为前端开发者准备的15款优秀的Sublime Text插件
- python 人工智能课程对孩子的好处_少儿编程有什么好处?儿童编程课程学习Python的4大原因...
- 2021“数维杯”国际大学生数学建模竞赛D题思路
- Android 如何查看apk签名信息的MD5(SHA1和SHA256也可以)
- 检测手机号是否开通微信
- 包饺子、看表演、逛庙会 中外居民北京“过大年”
- Intel处理器 天梯图
- Unity特效基础:粒子效果面板
- 易语言 vb c 那个写的程序运行快,VB好还是易语言
- wx.getLocation接口申请
- 查看库文件编译时所使用的GCC版本号
- 联想服务器RD450杨找不到raid选项,ThinkServer RD450服务器做RAID1
- 小应用程序设计(一)整人代码(我是猪)
热门文章
- python拆分excel的sheet为单文件_python拆分Excel表格并发送邮件
- python3中format方法_python3 自定制format格式化,很多很多的内置方法。。。。。。。。。。。...
- tableau两个不同的图合并_Tableau可视化分析-业务常用图形绘制1
- 两个git库之间迁移_Python 3 迁移怨声载道
- java easyui tree例子_EasyUI Tree的简单使用
- OpenCV-Python形态变换、图像金字塔、轮廓属性、直方图
- Cost Function
- GitHub开源城市结构公交路线数据可视化
- opencv线性插值(上采样)
- pyinstaller 打包tensorflow2.0为单个文件