当前位置: 首页 > news >正文

OpenCV几何图像变换(1)映射转换函数convertMaps()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

将图像变换映射从一种表示形式转换为另一种表示形式。
该函数将用于 remap 的映射对从一种表示形式转换为另一种表示形式。以下选项 ((map1.type(), map2.type()) → (dstmap1.type(), dstmap2.type())) 是支持的:

  • (CV_32FC1, CV_32FC1) → (CV_16SC2, CV_16UC1)。这是最常用的转换操作,其中原始的浮点数映射(见 remap)被转换为更紧凑且更快的固定点表示形式。第一个输出数组包含四舍五入的坐标,而第二个数组(仅在 nninterpolation=false 时创建)包含在插值表中的索引。
  • (CV_32FC2) → (CV_16SC2, CV_16UC1)。与上述情况相同,但原始映射存储在一个双通道矩阵中。
  • 反向转换。显然,重构的浮点数映射将不会完全与原始映射相同。

函数原型


void cv::convertMaps	
(InputArray 	map1,InputArray 	map2,OutputArray 	dstmap1,OutputArray 	dstmap2,int 	dstmap1type,bool 	nninterpolation = false 
)		

参数

  • 参数 map1 第一个输入映射,类型为 CV_16SC2、CV_32FC1 或 CV_32FC2。
  • 参数map2 第二个输入映射,类型为 CV_16UC1、CV_32FC1 或为空(空矩阵),分别对应不同的输入映射类型。
  • 参数dstmap1 第一个输出映射,具有类型 dstmap1type,并且与源映射 src 具有相同的尺寸。
  • 参数dstmap2 第二个输出映射。
  • 参数dstmap1type 第一个输出映射的类型,应为 CV_16SC2、CV_32FC1 或 CV_32FC2。
  • 参数nninterpolation 标志,指示固定的点映射是否用于最近邻插值或更复杂的插值方法。

代码示例

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{// 创建示例映射Mat mapX = Mat::zeros(400, 600, CV_32FC1);Mat mapY = Mat::zeros(400, 600, CV_32FC1);// 初始化映射矩阵for (int y = 0; y < mapX.rows; ++y){for (int x = 0; x < mapX.cols; ++x){mapX.at<float>(y, x) = x + 0.5f;  // 示例:添加 0.5 的偏移mapY.at<float>(y, x) = y - 0.5f;  // 示例:减去 0.5 的偏移}}// 转换映射Mat mapX16s, mapY16s;convertMaps(mapX, mapY, mapX16s, mapY16s, CV_16SC2);// 使用转换后的映射进行图像重映射Mat src = imread("/media/dingxin/data/study/OpenCV/sources/images/hawk.jpg");cv::Size sz2Sh( 400, 600 );cv::resize( src, src, sz2Sh, 0, 0, cv::INTER_LINEAR_EXACT );Mat dst;remap(src, dst, mapX16s, mapY16s, INTER_LINEAR);// 显示结果imshow("original", src);imshow("Result", dst);// 等待按键并关闭窗口waitKey(0);destroyAllWindows();return 0;
}

运行结果

原始图:

在这里插入图片描述
结果图:
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前端算法 | LeetCode第 70 题爬楼梯问题
  • 骑行耳机品牌前五名排行榜:5大优质骑行耳机闭眼入都不踩雷!
  • 哈佛大学年中回顾2024年ESG发展近况
  • 导出word格式的Javadoc(可用于快速生成项目详细设计文档)
  • Swoole 和 Java 哪个更有优势呢
  • 白骑士的HTML教学高级篇 3.4 性能优化
  • 音频分割怎么弄?手把手教会你实用的音频分割技巧
  • 5G毫米波测试助力突破高频段设备局限,实现高效外场测试
  • Json-复杂泛型解析工具类
  • Gaussian Splatting 在 Ubuntu22.04 下部署
  • 回顾加密风险投资15年演变:步履维艰,但总体向上
  • 存储管理功能
  • Redis 作为 PHP 的会话存储
  • ctypes简单学习
  • 免费的开源报表工具都有哪些?盘点一下打工人必备的几款开源报表工具!
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Akka系列(七):Actor持久化之Akka persistence
  • Angularjs之国际化
  • CSS3 变换
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • JavaScript创建对象的四种方式
  • js算法-归并排序(merge_sort)
  • leetcode46 Permutation 排列组合
  • Lucene解析 - 基本概念
  • MySQL用户中的%到底包不包括localhost?
  • Theano - 导数
  • 检测对象或数组
  • 京东美团研发面经
  • 马上搞懂 GeoJSON
  • 前端性能优化——回流与重绘
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 2017年360最后一道编程题
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • #VERDI# 关于如何查看FSM状态机的方法
  • (1)Jupyter Notebook 下载及安装
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (力扣)1314.矩阵区域和
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (顺序)容器的好伴侣 --- 容器适配器
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net开发引用程序集提示没有强名称的解决办法
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .NET正则基础之——正则委托
  • .pop ----remove 删除
  • /etc/skel 目录作用