OpenCV:remap()简单重映射

article/2025/8/27 12:27:52

学习自:【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;
}

1
2


http://chatgpt.dhexx.cn/article/ry5dRkfd.shtml

相关文章

JS获取对象键值对中key值的方法

使用Object.keys Object.keys( ) 会返回一个数组&#xff0c;数组中是这个对象的key值列表 所以只要Object.keys(a)[0]&#xff0c; 就可以得只包含一个键值对的key值 下面是MDN中对Object.keys的描述 Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组&…

C# 键值对

1.初始化一个键值对 1 //初始化定义一个键值对&#xff0c;注意最后的括号 2 Dictionary<int, string> dic new Dictionary<int, string>(); 2.为键值对添加元素 1 //键值对的Add函数 2 dic.Add(2, "zhao"); 3 dic.Add(4, "qian"); 4 dic…

js中往数组对象中添加键值对的方法有哪些?

❤️❤️❤️Topology-le5le智慧光伏能源可视化方案❤️❤️❤️ &#x1f31f;&#x1f31f;&#x1f31f;Topology可视化绘图引擎&#x1f31f;&#x1f31f;&#x1f31f; 1.Object.assign() 用法&#xff1a;Object.assign(源对象, {要添加的键值对}) 2.拓展运算符&…

键值对操作

键值对 RDD 通常用来进行聚合计算。我们一般要先通过一些初始 ETL(抽取、转化、装载)操作来将数据转化为键值对形式。键值对 RDD 提供了一些新的操作接口(比如统计每个产品的评论,将数据中键相同的分为一组,将两个不同的 RDD 进行分组合并等)。 1. 动机 Spark 为包含键值对类…

java键值对的使用

Map集合没有继承Collection接口&#xff0c;但是其提供了key到value的映射。每一个key不能有相同&#xff0c;每个key只能映射一个value值。 Map接口常用方法&#xff1a; 方法功能描述put(K key, V value)向集合中添加指定的key与value的映射关系containsKey(Object key)如果…

C++ map容器(键值对)

文章目录 1&#xff0c;map简介2&#xff0c;map的功能3&#xff0c;使用map4&#xff0c;map的构造函数5&#xff0c;插入元素6&#xff0c; 查找元素7&#xff0c; 刪除与清空元素8&#xff0c;map的大小9&#xff0c;map的基本操作函数&#xff1a; 使用示例示例1 20221027 …

java 键值对详解及java键值对代码

在 Java中&#xff0c;对象可以理解为一个列表。这个列表里面的每个元素都是一个“键”&#xff0c;而每个“键”都是一个值。 键值对的概念&#xff0c;并不是在 Java中第一次出现&#xff0c;在 java 1.x中就已经有了。那时候它的意思是在一个命名空间中建立两个名字相同的对…

node(map对象/键值对,作用域,函数作用域,全局作用域)

map键值对 什么是键值对? 键值对(key value) 顾名思义,每一个键会对应一个值。 比如&#xff1a; 身份证号和你本人是绑定的关系。每一个身份证号(键)都会对应一个小可爱(值)。 我们在登录微信或者游戏时,需要输入手机号验证身份。系统会向该手机号发送一条验证短信。 这里的…

键值对是什么?

一、键值对问题&#xff1a; 键值对&#xff08;“key value”&#xff09;&#xff0c;顾名思义&#xff0c;每一个键会对应一个值。 二、举个例子 身份证号和你本人的绑定关系&#xff0c;在系统中输入身份证号(键)都会对应一个小可爱(值)。咱在登陆微信、游戏或外卖账号…

键值对

感谢传智播客C语言视频教程对作者的帮助。 一、键值对问题 1、什么是键值对 举个简单的例子&#xff0c;电话簿中&#xff0c;键&#xff1a;小马、值&#xff1a;18753137777。是一种简单的对应关系。 2、代码举例 键值对&#xff08;“key value”&#xff09;字符串&a…

MBR、EBR、OBR的区别和联系

先看图&#xff1a; 一块硬盘&#xff0c;最开始只能实现4个分区&#xff0c;也就是4个主分区。 后来的发展&#xff0c;4个分区不够用了&#xff0c;可以有一个分区作为扩展分区&#xff0c;用它来作为总扩展分区&#xff0c;里面可以分成很多个子扩展分区&#xff0c;每个子…

MBR分区结构、DPT分区表、EBR扩展引导

本文链接&#xff1a;http://www.blogfshare.com/mbr-dpt-ebr.html 主引导记录&#xff08;Master Boot Record&#xff0c;缩写&#xff1a;MBR&#xff09;&#xff0c;又叫做主引导扇区&#xff0c;是计算机开机后访问硬盘时所必须要读取的首个扇区&#xff0c;它在硬盘上的…

C语言读取磁盘分区信息(MBR、DPT、EBR)

文章目录 简介使用的函数1.CreateFile()函数打开设备2.DeviceIoControl()函数返回磁盘设备信息3.SetFilePointer()函数设置读取磁盘信息位置4.ReadFile()函数读取磁盘内容 源代码结果分析MBR部分&#xff1a;第一个EBR的DPT内容为&#xff1a;第2个EBR内容 总结 简介 在win8以后…

使用Epoch-Based Reclamation(EBR,特定域回收的一种方法)修改 lazy-list

如前文所说&#xff0c;lazy-list最大的隐患莫过于逻辑删除&#xff0c;而没有物理删除问题&#xff0c;因此EBR首先就把这个问题给他solve了。 一.EBR修改部分 int parse_delete(intset_l_t *set, val_t val) {node_l_t *pred, *curr;int result, validated, isVal;while(1)…

淘宝电商搜索EBR算法笔记

淘宝电商搜索EBR算法笔记 - 知乎《Embedding-based Product Retrieval in Taobao Search》介绍了淘宝目前最新的EBR算法。仍然是一个双塔的结构&#xff0c;query/user一个塔&#xff0c;item一个塔&#xff0c;各自得到向量表示&#xff0c;然后计算内积。 网络结构如上图所示…

解决西门子ebr设备模块更新报错,EQP_STATEVALUE more than one row

问题排查报告 原文来至 问题跟踪 首先定位到EQP_STATEVALUE表&#xff0c;发现数据出现重复&#xff1a; 执行语句取出所有非重复数据&#xff1a; select t.stateid,t.fk_statelistcst,t.code,t.label,t.functionid,t.pk_id,t.dlu,t.dluunit,t.cpt,t.haseqpimpact from EQP…

机械臂关节模组制动相关(零差云控eBr)

目录 前言一、电磁插销式抱闸1.原理2.特点 二、电磁摩擦片式制动器1.原理2.特点 三、零差云控电磁摩擦片式制动器&#xff08;eBreaker&#xff09;1.简介2.使用说明需要注意的事情3.接线 总结参考文献 前言 现阶段机械臂的制动方法主要有两种&#xff0c;一种是电磁插销式抱闸…

西门子EBR与BATCH通讯方法,mes与batch交互

最新更新请访问&#xff1a;mesebr.com 链接 1 前期准备 1.1 网络检查 两台服务器防火墙全部关闭&#xff1b;两台服务器之间可以相互ping同&#xff0c;若batch服务器连接oracle数据库的连接名称写的机器名&#xff0c;则batch服务器ping机器名也要可以ping通&#xff1b; 1…

WinHex数据恢复笔记-数据恢复与硬件维护-MBR格式--MBR,EBR系统结构

MBR&#xff0c;EBR系统结构 MBR限制2TB&#xff0c;最多有4个逻辑分区—如果有扩展&#xff08;3个主分区和1个扩展分区&#xff09; FAT32不能在大于32GB的盘上添加 MBR指向第一个EBR 第一个EBR(以链表)指向第二个EBR(以链表)指向第二个EBR(以链表)… MBR MBR数据结构 4…

西门子MES软件ebr脚本使用说明-SIMATIC IT EBR(Opcenter Execution Pharma

最新更新发布在此处 ebr脚本常用函数 ###参数输入输出 输入的type选择tag value;输出的type选择tag NAME; 实例 mData.InsertData ousNAME,0,straaa 输出文本 mData.InsertData ousAGE,1,age 输出数字html直接输出 mRecordText.WriteHTML str_htmlr 可直接输出html内…