在使用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详解相关推荐

  1. html5代码转换为视频,HTML5中的视频代码详解

    摘要 腾兴网为您分享:HTML5中的视频代码详解,智学网,云闪付,易推广,小红书等软件知识,以及360win10,流量魔盒,fitbit,上港商城,安卓2.3.7,全民惠,五年级下册英语单词表图片,t ...

  2. VMware虚拟机文件夹中各文件作用详解

    VMware虚拟机文件夹中各文件作用详解 虚拟机的文件管理由VMware Workstation来执行. 一个虚拟机一般以一系列文件的形式储存在宿主机中, 这些文件一般在由workstation为虚拟 ...

  3. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  4. php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念 js里常用的如下 - phpStudy...

    JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...

  5. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  6. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  7. java中匿名内部类详解_java 中匿名内部类的实例详解

    搜索热词 java 中匿名内部类的实例详解 原来的面貌: class TT extends Test{ void show() { System.out.println(s+"~~~哈哈&q ...

  8. java中的进制输出转换_Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  9. PHP开发中常见的安全问题详解和解决方法

    PHP开发中常见的安全问题详解和解决方法 参考文章: (1)PHP开发中常见的安全问题详解和解决方法 (2)https://www.cnblogs.com/walblog/articles/83313 ...

最新文章

  1. linux 没有root登陆
  2. Android知识点剖析系列:深入了解layout_weight属性
  3. 关于快速开发和设计应用系统的一些个人的意见
  4. junit单元测试断言_简而言之,JUnit:单元测试断言
  5. 向oracle表空间添加一个数据文件命令
  6. MySql5.7.12设置log-bin
  7. 【算法】给定一个链表,判断链表中是否有环
  8. 2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest
  9. VBa运行c语言程序,Excel VBA编程详解
  10. A* operator/(A*, A*)‘ must have an argument of class or enumerated type
  11. VINS-Mono 理论详细解读——紧耦合后端非线性优化 IMU+视觉的残差residual、Jacobian、协方差、基于舒尔补的边缘化
  12. 【老九】【Python】文件操作与异常处理
  13. 人人商城之导出excel表
  14. 1.MySQL增删改查(初阶)
  15. 《C#程序设计》猜猜看游戏开发总结
  16. 论文发表投稿流程的说明
  17. 22个无版权限制的高清无码图库站
  18. 技术大佬:我去,你竟然还在用 try–catch-finally
  19. 怎么把一个网页设置快捷方式弄到桌面上去
  20. 使用anaconda创建虚拟环境

热门文章

  1. 笔记整理--Linux守护进程
  2. 海思hi3516EV300_4G图传模组防雷防静电推荐图
  3. 地理商业智能发展浅析
  4. matlab变量相加,如何在空间计量matlab程序中加入更多的变量?
  5. linux学习笔记16
  6. Linux DRM(二)基本概念和特性
  7. Git详细使用说明++
  8. 【微信小程序】04-公共文件引入
  9. java代理模式解析
  10. 12-Java 继承抽象类代码块(详解~)