remap中的xmap,ymap详解
在使用remap函数时一直没明白那个map_x,和map_y一直搞混了,通过实验来记录一下以防以后忘记了
先看一段代码
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;int main()
{
Mat srcImage=imread("1.jpg",1);
imshow("yuantu",srcImage);
Mat dstImage,map_x,map_y;
dstImage.create(srcImage.size(),srcImage.type());
map_x.create(srcImage.size(),CV_32FC1);
map_y.create(srcImage.size(),CV_32FC1);for(int i=0;i<srcImage.rows;i++)
{ for(int j=0;j<srcImage.cols;j++)//clos表示图像的宽,row表示图像的高{
//-----上下变换----使坐标的纵坐标数值不变,横坐标从大到小排列(原图中纵坐标是从小到大排列的)
map_x.at<float>(i,j)=static_cast<float>(j);
map_y.at<float>(i,j)=static_cast<float>(srcImage.rows-i);
//-----左右变换----使坐标的横坐标数值不变,纵坐标从大到小排列(原图中横坐标是从小到大排列的)
//map_x.at<float>(i,j)=static_cast<float>(i);//x轴横着的
//map_y.at<float>(i,j)=static_cast<float>(srcImage.cols-j);//y轴竖着的}
}remap(srcImage,dstImage,map_x,map_y,INTER_LINEAR);
imshow("xianshi",dstImage);
waitKey(0);
return 0;
}
代码中的map_x实际上记录的是对应srcImage中(i,j)位置的横坐标,map_y实际上记录的是(i,j)位置的纵坐标,而我们在这里把像素操作的i当做了横坐标,j当做了纵坐标。
所以有时会混淆怎么赋值.看看下图:map_x是横着跑的,map_y是竖着跑的。来具体看看像素:
假设这是一个图片map_x上面对应的是:map_y是:所以如果我要让第一行的12和98换位置,那么
map_x:
3 1 2 0
0 1 2 3
0 1 2 3
map_y不变
而我们表示像素的的时候12是srcImage.at<uchar>(0,0) 98是srcImage.at<uchar>(0,3);
简写a(i1,j1),a(i1,j2);很容易误认为换j,而这里map_x可以看成是在屏幕x轴(左上角横着的)的值,map_y可以看成是屏幕y轴(左上角往下)的值,那么map_x存的是像素表示中的j值(列),map_y存的是像素表示中的i值(行).这和用图像构建一个矩形是一样的image.cols是宽,image.row是高.
转载自:https://blog.csdn.net/u010368556/article/details/60471780
remap中的xmap,ymap详解相关推荐
- html5代码转换为视频,HTML5中的视频代码详解
摘要 腾兴网为您分享:HTML5中的视频代码详解,智学网,云闪付,易推广,小红书等软件知识,以及360win10,流量魔盒,fitbit,上港商城,安卓2.3.7,全民惠,五年级下册英语单词表图片,t ...
- VMware虚拟机文件夹中各文件作用详解
VMware虚拟机文件夹中各文件作用详解 虚拟机的文件管理由VMware Workstation来执行. 一个虚拟机一般以一系列文件的形式储存在宿主机中, 这些文件一般在由workstation为虚拟 ...
- C++中substr()函数用法详解
C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...
- php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念
js里常用的如下 - phpStudy...
JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...
- Java中的static关键字详解
** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...
- java多线程中的join方法详解
java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...
- java中匿名内部类详解_java 中匿名内部类的实例详解
搜索热词 java 中匿名内部类的实例详解 原来的面貌: class TT extends Test{ void show() { System.out.println(s+"~~~哈哈&q ...
- java中的进制输出转换_Java I/O : Java中的进制详解
作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...
- PHP开发中常见的安全问题详解和解决方法
PHP开发中常见的安全问题详解和解决方法 参考文章: (1)PHP开发中常见的安全问题详解和解决方法 (2)https://www.cnblogs.com/walblog/articles/83313 ...
最新文章
- linux 没有root登陆
- Android知识点剖析系列:深入了解layout_weight属性
- 关于快速开发和设计应用系统的一些个人的意见
- junit单元测试断言_简而言之,JUnit:单元测试断言
- 向oracle表空间添加一个数据文件命令
- MySql5.7.12设置log-bin
- 【算法】给定一个链表,判断链表中是否有环
- 2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest
- VBa运行c语言程序,Excel VBA编程详解
- A* operator/(A*, A*)‘ must have an argument of class or enumerated type
- VINS-Mono 理论详细解读——紧耦合后端非线性优化 IMU+视觉的残差residual、Jacobian、协方差、基于舒尔补的边缘化
- 【老九】【Python】文件操作与异常处理
- 人人商城之导出excel表
- 1.MySQL增删改查(初阶)
- 《C#程序设计》猜猜看游戏开发总结
- 论文发表投稿流程的说明
- 22个无版权限制的高清无码图库站
- 技术大佬:我去,你竟然还在用 try–catch-finally
- 怎么把一个网页设置快捷方式弄到桌面上去
- 使用anaconda创建虚拟环境