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;
}

运行结果

原始图:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405488.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

43.x86游戏实战-XXX寻找吸怪坐标

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

VMware vSphere ESXi确定vmnic*网络适配器用途的方法

近期有VMware vSphere ESXi宿主机从VMware ESXi, 6.7.0, 17499825版本重装为VMware ESXi, 7.0.3, 21930508后&#xff0c;发现对应网卡的物理适配器名vmnic*发生变化&#xff0c;本文记录了如何确定网络适配器用途的方法。 一、问题描述 原宿主机为ESXi, 6.7.0, 17499825&am…

【YOLO5 项目实战】(4)红外目标检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO5 项目实战】&#xff08;1&#xff09;YOLO5 环境配置与测试 【YOLO5 项目实战】&#xff08;2&#xff09;使用自己的数据集训练目标检测模型 【YOLO5 项目实战】&#xff08;3&#xff09;P…

2、Unity【基础】Mono中的重要内容

Unity基础 MonoBehavior中的重要内容 文章目录 Mono中的重要内容1、延迟函数1、延迟函数概念2、延迟函数使用3、延迟函数受对象失活销毁影响思考1 利用延时函数实现计时器思考2 延时销毁 2、协同程序1、Unity是否支持多线程2、协同程序概念3、协同程序和线程的区别4、协程的使用…

西门子PLC12001500变量标签导入昆仑通态触摸屏

目录 新建DB测试数据块导出DB数据导出结构体类型触摸屏导入标签 新建DB测试数据块 新建DB1数据块&#xff0c;里面包含普通bool数据类型&#xff0c;以及结构体数据类型 同时需要取消优化的块访问 导出DB数据 DB1数据块右击——从块生成源——仅所选块 这里要注意的是导出文…

悟空降世 撼动全球

文&#xff5c;琥珀食酒社 作者 | 积溪 一只猴子能值多少钱&#xff1f; 答案是&#xff1a;13个小目标 这两天 只要你家没有断网 一定会被这只猴子刷屏 它就是咱国产的3A游戏 《黑神话&#xff1a;悟空》 这只猴子到底有多火&#xff1f; 这么跟你说吧 茅台见了它都…

备战秋招60天算法挑战,Day22

题目链接&#xff1a; https://leetcode.cn/problems/missing-number/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1HS42197Hc/ LeetCode 268.丢失的数字 题目描述 给定一个包含 [0, n] 中 n 个数的数组 nums &#xff0c;找出 [0, n] 这个范围内没有出现在数组…

微服务注册中心

目录 一、微服务的注册中心 1、注册中心的主要作用 &#xff08;1&#xff09;服务发现 &#xff08;2&#xff09;服务配置 &#xff08;3&#xff09;服务健康检测 2、 常见的注册中心 二、nacos简介 1、nacos实战入门 &#xff08;1&#xff09;搭建nacos环境 &am…

Vue插值:双大括号标签、v-text、v-html、v-bind 指令

创建应用程序实例后&#xff0c;需要通过插值进行数据绑定。数据绑定是 Vue.js 最核心的一个特性。建立数据绑定后&#xff0c;数据和视图会相互关联&#xff0c;当数据发生变化时&#xff0c;视图会自动进行更新。这样就无须手动获取 DOM 的值&#xff0c;使代码更加简洁&…

外部环境连接kafka

修改配置文件外部环境连接kafka 1、kafka的docker官方镜像地址2、kafka官方介绍的三种连接方式3、方式一&#xff1a;Default configs默认配置4、方式二&#xff1a;File input&#xff08;文件输入&#xff1a;外部配置文件替换docker容器内的配置文件&#xff09;4.1、首先查…

自存实践本地访问 nginx放前端打包好的项目

nginx 部署前端项目_哔哩哔哩_bilibili 将打包好的dits文件放到 配置nginx.conf文件的location 启动命令 start nginx.exe 输入localhost即可访问打包好的项目 nginx的特点 1.静态资源 2.转发 设置代理转发请求 关闭nginx .\nginx.exe -s quit

分享从零开始学习网络设备配置--任务6.2 实现网络设备的远程管理

任务描述 某公司的网络管理员小赵负责公司办公网的管理工作&#xff0c;熟悉了公司内部设备运行情况&#xff0c;每天都需要保障公司内部网络设备的正常运行&#xff0c;同时进行办公网的日常管理和维护工作。 在安装办公网中&#xff0c;路由器和交换机放置在中心机房&…

【生日视频制作】教师节中秋节国庆节红色直升飞机AE模板修改文字软件生成器教程特效素材【AE模板】

红色直升飞机生日视频制作教程AE模板改文字广软件告生成器素材 怎么如何做的【生日视频制作】教师节中秋节国庆节红色直升飞机AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频…

【Python机器学习】NLP概述——词序和语法

词的顺序很重要&#xff0c;那些在词序列&#xff08;如句子&#xff09;中控制词序的规则被称为语言的语法&#xff08;也被称为文法&#xff09;。这是之前的词袋或词向量例子中所丢弃的信息。在大多数简短的短语甚至许多完整的句子中&#xff0c;上述词向量近似方法都可以奏…

电脑硬盘坏了怎么恢复数据?

在数字化时代&#xff0c;电脑硬盘作为存储核心&#xff0c;承载着我们的工作文档、学习资料、家庭照片以及无数珍贵的回忆。然而&#xff0c;硬盘作为机械设备&#xff0c;也有其寿命和脆弱性&#xff0c;一旦出现故障&#xff0c;数据恢复便成为了一个紧迫而棘手的问题。本文…

Centos7 message日志因dockerd、kubelet、warpdrive、containerd等应用迅速增长

问题&#xff1a;公司服务器在部署一套业务后&#xff0c;message日志记录大量的dockerd、kubelet、warpdrive、containerd应用日志&#xff0c;每天增加2G大小的日志 解决方案&#xff1a; 前期吐槽下&#xff1a;发现某个帖子&#xff0c;需要会员或者花钱才能看&#xff0c…

AfuseKt v1.3.5 — 打造自己的视频库,可刮削

AfuseKt是一款功能全面的安卓视频播放器&#xff0c;支持从阿里云盘、Alist、WebDAV、Emby到Jellyfin等多个平台直接播放视频。注册简单&#xff0c;一次邮箱登记即可畅享所有功能&#xff0c;包括自动刮削和海报墙展示。无论你是电影迷还是系列剧的忠实粉丝&#xff0c;AfuseK…

Elasticsearch-关键词随机查询(8.x)

目录 一、查询语句 二、Java代码实现 基础介绍&#xff1a; ES自定义评分机制:function_score查询详解-阿里云开发者社区ES自定义评分机制:function_score查询详解https://developer.aliyun.com/article/1054571 开发版本详见&#xff1a;Elasticsearch-经纬度查询(8.x-半径…

npm安装时一直在idealTree:npm: sill idealTree buildDeps卡住不动解决方法

npm安装xmysql时一直idealTree:npm: sill idealTree buildDeps卡住不动 问题解决&#xff0c;如下图所示 解决方法&#xff1a; 1、查看.npmrc位置&#xff0c;并去目录中删掉.npmrc文件 --在cmd&#xff08;DOS页面&#xff09;界面执行下述指令&#xff0c;可查看 .npmrc 文…

数学建模起步感受(赛前15天)

0基础直接上手数模&#xff0c;因为大一&#xff01;年轻就是无所畏惧&#xff01;开个玩笑&#xff0c;因为数模比赛比一年少一年… 抱着不打也是浪费的态度&#xff0c;我开始着手准备 首先python啥也不会&#xff0c;知道有元组这玩意… 仅仅在刷软考题的时候遇到python选择…