学习自:【OpenCV入门教程之十七】OpenCV重映射

  • 重映射,就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程。
  • 为了完成映射过程, 我们需要获得一些插值为非整数像素的坐标,因为源图像与目标图像的像素坐标不是一一对应的。
  • 一般情况下,我们通过重映射来表达每个像素的位置 (x,y),
    像这样 : g(x,y) = f ( h(x,y) )
    在这里, g( ) 是目标图像, f() 是源图像, 而h(x,y) 是作用于 (x,y) 的映射方法函数。
  • 在OpenCV中,我们用函数remap( )来实现简单重映射。

C++:
void remap(InputArray src, //输入图像OutputArraydst, //输出图像InputArray map1,//第一个映射InputArray map2, //第二个映射int interpolation, //插值intborderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
  • 第三个参数,InputArray类型的map1,它有两种可能的表示对象:
    表示点(x,y)的第一个映射。
    表示CV_16SC2 , CV_32FC1 或CV_32FC2类型的X值。

  • 第四个参数,InputArray类型的map2,同样,它也有两种可能的表示对象,而且他是根据map1来确定表示那种对象。
    若map1表示点(x,y)时。这个参数不代表任何值。
    表示CV_16UC1 , CV_32FC1类型的Y值(第二个值)。

  • 第五个参数,int类型的interpolation,插值方式,之前的resize( )函数中有讲到,需要注意,resize( )函数中提到的INTER_AREA插值方式在这里是不支持的,所以可选的插值方式如下:

    • INTER_NEAREST - 最近邻插值
      INTER_LINEAR – 双线性插值(默认值)
      INTER_CUBIC – 双三次样条插值(逾4×4像素邻域内的双三次插值)
      INTER_LANCZOS4 -Lanczos插值(逾8×8像素邻域的Lanczos插值)
  • 第六个参数,int类型的borderMode,边界模式,有默认值BORDER_CONSTANT,表示目标图像中“离群点(outliers)”的像素值不会被此函数修改。

  • 第七个参数,const Scalar&类型的borderValue,当有常数边界时使用的值,其有默认值Scalar( ),即默认值为0。

//-----------------------------------【头文件包含部分】---------------------------------------
//       描述:包含程序所依赖的头文件
//----------------------------------------------------------------------------------------------
#include"opencv2/highgui/highgui.hpp"
#include"opencv2/imgproc/imgproc.hpp"
#include <iostream>//-----------------------------------【命名空间声明部分】--------------------------------------
//    描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------
using namespace cv;//-----------------------------------【main( )函数】--------------------------------------------
//    描述:控制台应用程序的入口函数,我们的程序从这里开始执行
//-----------------------------------------------------------------------------------------------
int main( )
{//【0】变量定义MatsrcImage, dstImage;Matmap_x, map_y;//【1】载入原始图srcImage= imread( "1.jpg", 1 );if(!srcImage.data) { printf("读取图片错误,请确定目录下是否有imread函数指定的图片存在~! \n"); return false; } imshow("原始图",srcImage);//【2】创建和原始图一样的效果图,x重映射图,y重映射图dstImage.create(srcImage.size(), srcImage.type() );map_x.create(srcImage.size(), CV_32FC1 );map_y.create(srcImage.size(), CV_32FC1 );//【3】双层循环,遍历每一个像素点,改变map_x & map_y的值for(int j = 0; j < srcImage.rows;j++){for(int i = 0; i < srcImage.cols;i++){//改变map_x & map_y的值.map_x.at<float>(j,i)= static_cast<float>(srcImage.cols - i);map_y.at<float>(j,i)= static_cast<float>(j);}}//【4】进行重映射操作remap(srcImage, dstImage, map_x, map_y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0,0,0) );//【5】显示效果图imshow("【程序窗口】", dstImage );waitKey();return0;
}


OpenCV:remap()简单重映射相关推荐

  1. 【OpenCV 】Remapping 重映射¶

    目录 1.1目标 1.2 理论 1.3 代码 1.4 运行结果 1.1目标 展示如何使用OpenCV函数 remap 来实现简单重映射. 1.2 理论 把一个图像中一个位置的像素放置到另一个图片指定位 ...

  2. remap(地址重映射)机制

    remap(地址重映射)机制 (1)在系统复位之后,ARM将从地址0处开始执行指令,因此地址0x0处必须是ROM之类的在掉电之后数据不会天失的存储介质,而且存放的必须是E确的可执行的指令. (2)在A ...

  3. opencv Remap 图像的映射

    重映射是什么意思? 把一个图像中一个位置的像素放置到另一个图片指定位置的过程. 为了完成映射过程, 有必要获得一些插值为非整数像素坐标,因为源图像与目标图像的像素坐标不是一一对应的. 我们通过重映射来 ...

  4. OpenCV学习笔记(十四):重映射:remap( )

    OpenCV学习笔记(十四):重映射:remap( ) 图像的坐标映射是通过原图像与目标图像之间建立一种映射关系,这种映射关系有两种,一种是计算原图像任意像素在映射后图像的坐标位置,另一种是计算变换后 ...

  5. OpenCV之imgproc 模块. 图像处理(3)霍夫线变换 霍夫圆变换 Remapping 重映射 仿射变换

    霍夫线变换 目标 在这个部分您将学习到: 使用OpenCV的以下函数 HoughLines 和 HoughLinesP 来检测图像中的直线. 原理 Note 以下原理的说明来自书籍 学习OpenCV  ...

  6. OpenCV探索之路(八):重映射与仿射变换

    重映射 重映射就是把一幅图像中某个位置的像素放置到另一个图片中指定位置的过程. 用一个数学公式来表示就是: 其中的 f 就是映射方式,也就说,像素点在另一个图像中的位置是由 f 来计算的. 在Open ...

  7. OpenCV精进之路(七):图像变换——重映射与仿射变换

    重映射 重映射就是把一幅图像中某个位置的像素放置到另一个图片中指定位置的过程. 用一个数学公式来表示就是: 其中的 f 就是映射方式,也就说,像素点在另一个图像中的位置是由 f 来计算的. 在Open ...

  8. 【OpenCV入门教程之十七】OpenCV重映射 SURF特征点检测合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/30974513 作者:毛星云(浅墨) ...

  9. OpenCV学习12_霍夫变换与重映射

    一.霍夫变换 在图像处理和计算机视觉领域中,如何从当前的图像中提取所需要的特征信息是图像识别的关键所在.在许多应用场合中需要快速准确地检测出直线或者圆.其中一种非常有效的解决问题的方法是霍夫(Houg ...

最新文章

  1. d3设置line长度_使用d3画一些基本的图形
  2. 培育强人工智能的「ImageNet」:上海交大卢策吾组提出铰接物体知识库 AKB-48
  3. 此问题可能是由配置更改或安装另一个扩展导致的
  4. Markdown的基本语法
  5. 高斯分布概念学习和C#自定义控件
  6. 20155301实验三 免杀原理与实践
  7. python迭代是什么意思_python中什么是迭代?
  8. jms message组成和jsm selector详解(二)
  9. C#的float、double与decimal
  10. Jeecg引领企业开发潮流,开启插件开发时代,微信企业号插件(jeecg-p3-biz-qywx)首次发布
  11. 学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(下)
  12. 谷歌Pixel 4“浴霸”相机模组细节曝光:包含一枚长焦镜头
  13. window创建计划自动启动服务器,WINDOWS2008计划任务无法启动
  14. Excel查询两列值的差异 -- VLOOPUP
  15. php本地解密,PHPDecode 在线解密工具
  16. 自制力差的元凶及习惯的养成过程
  17. 研究生如何与导师沟通?来自青年教师的视角
  18. CSP模拟试题——2020
  19. C. Equalize
  20. 计算数据的经验分布函数与MATLAB作图

热门文章

  1. 腾讯云短信服务(SMS)申请流程
  2. Appium服务器初始化参数(Capability)
  3. 习题8-4 报数 (20分)
  4. 计算机打字测速,电脑的打字测速软件分享
  5. dlt645协议电表数据采集接入PLC或scada等组态软件系统(转modbus)实现内网监控技术方案
  6. 规范小区电瓶车充电桩的分布保障充电安全
  7. 关于PHP程序员技术职业生涯规划 2017年3月5日韩 天峰
  8. 捣鼓PlantUML(一、环境)
  9. 【Python自然语言处理】读书笔记:第五章:分类和标注词汇
  10. windows安装hadoop教程,带截图