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

news2024/9/22 3:54:14
  • 操作系统: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.coloradmin.cn/o/2057779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

车辆类型检测算法、车辆类型源码及其样本与模型解析

车辆类型检测算法是利用计算机视觉和深度学习技术&#xff0c;对车辆图像进行自动分析和识别&#xff0c;以判断车辆的类型&#xff08;如轿车、SUV、货车等&#xff09;的一种算法。以下是对车辆类型检测算法的详细解析&#xff1a; 一、算法基础 车辆类型检测算法的基础是图…

区间预测|基于长短期记忆网络LSTM分位数单变量时间序列区间预测Matlab程序QRLSTM

区间预测|基于长短期记忆网络LSTM分位数单变量时间序列区间预测Matlab程序QRLSTM 文章目录 前言区间预测|基于长短期记忆网络LSTM分位数单变量时间序列区间预测Matlab程序QRLSTM 一、QRLSTM模型1. 基本原理1.1 LSTM (Long Short-Term Memory)1.2 量化回归&#xff08;Quantile …

移动端GenAI应用的崛起:从市场规模到成功案例分析

随着生成式人工智能&#xff08;GenAI&#xff09;技术的飞速发展&#xff0c;移动应用市场正经历一场前所未有的变革。从图像编辑到聊天机器人&#xff0c;这些基于AI的应用不仅满足了用户日益增长的需求&#xff0c;也为企业带来了巨大的商业机遇。本文将探讨这一领域的最新趋…

网站建设中:高效利用Robots.txt文件的策略与实践

原文&#xff1a;网站建设中&#xff1a;高效利用Robots.txt文件的策略与实践 - 孔乙己大叔 (rebootvip.com) 在网站中使用robots.txt文件是一种控制搜索引擎爬虫访问网站内容的方法。以下是关于如何在网站中使用robots.txt的详细步骤和注意事项&#xff1a; 一、创建robots.t…

集团数字化转型方案(四)

集团数字化转型方案通过全面部署人工智能&#xff08;AI&#xff09;、大数据分析、云计算和物联网&#xff08;IoT&#xff09;技术&#xff0c;创建了一个智能化的企业运营平台&#xff0c;涵盖从业务流程自动化、实时数据监控、精准决策支持&#xff0c;到个性化客户服务和高…

PV、UV、IP:网站流量分析的关键指标

原文&#xff1a;PV、UV、IP&#xff1a;网站流量分析的关键指标 - 孔乙己大叔 (rebootvip.com) 摘要&#xff1a; 在浩瀚的互联网海洋中&#xff0c;PV&#xff08;Page View&#xff0c;页面浏览量&#xff09;、UV&#xff08;Unique Visitor&#xff0c;独立访客数…

Eclipse SVN 插件在线下载地址

Eclipse SVN 插件 Subversive 在线安装 1、选择help下的install new software 2、点击 add 3、Name随便写&#xff0c;Location输入&#xff1a; https://download.eclipse.org/technology/subversive/4.8/release/latest/ 点击Add 4、然后一直下一步&#xff0c;Finish&am…

【QT】——1_QT学习笔记

一、QT是什么&#xff1f; QT 是一个功能强大、应用广泛的跨平台 C 应用程序开发框架&#xff0c;它不仅提供了丰富多样、美观实用的图形界面组件&#xff0c;还具备高效灵活的信号与槽通信机制&#xff0c;能够帮助开发者轻松构建出复杂且性能优越的应用程序&#xff0c;广泛…

VS Code中基于MSTest编写和运行测试

MS Test&#xff08;Microsoft Test Framework&#xff09;是微软提供的一个用于.NET应用程序的单元测试框架。以下是一个使用MS Test进行单元测试的示例&#xff0c;该示例将涵盖测试的基本步骤和概念。 项目搭建 在VS Code中开发C#时&#xff0c;创建solution&#xff08;解…

AI绘画Stable Diffusion画全身图总是人脸扭曲?ADetailer插件实现一键解决!商业级AI人物生成教程

大家好&#xff0c;我是灵魂画师向阳 你是否遇到过SD生成的人物脸部扭曲、甚至令人恶心的情况&#xff1f;也曾感到束手无策&#xff1f;别担心&#xff0c;这份教程专为你而来。 在使用SD生成人物全身照时&#xff0c;你可能经常发现人物的脸部会出现扭曲问题。这是因为人物…

整体思想以及取模

前言&#xff1a;一开始由于失误&#xff0c;误以为分数相加取模不能&#xff0c;但是其实是可以取模的 这个题目如果按照一般方法&#xff0c;到达每个节点再进行概率统计&#xff0c;但是不知道为什么只过了百分之十五的测试集 题目地址 附上没过关的代码 #include<bits…

如何在IIS中为typecho博客启用HTTPS访问

在上篇文章中&#xff0c;介绍了如何安装typecho博客系统&#xff0c;默认是没有启用https访问的&#xff0c;这篇文章介绍如何 在IIS中开启 https访问。 开启https访问需要两个步骤&#xff1a; 1、申请 一个ssl证书&#xff0c;我这里以阿里云上面的申请流程为例。其它云服务…

[Linux网络】基本网络命令socket编写TCP应用层实现简易计算器

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;我们在上篇博客中学习了使用socket套接字完成了UDP的网络编程&#xff0c;今天我们继续使用套接字完成TCP的学习。 首先我们先来了解一些网络指令&#xff0c;让大家可以在实现网络编程后查看一些与网…

勇闯机器学习(第五关--中文文本特征提取)

以下内容皆为原创&#xff0c;制作实属不易&#xff0c;请点点关注和赞赞❥(^_^) 第一关&#xff1a;机器学习概念和流程http://t.csdnimg.cn/IuHh4第二关&#xff1a;数据集的使用http://t.csdnimg.cn/2jsdi第三关&#xff1a;特征工程-字典特征提取http://t.csdnimg.cn/ZpMt…

[数据集][目标检测]铁轨缺陷检测数据集VOC+YOLO格式4020张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4020 标注数量(xml文件个数)&#xff1a;4020 标注数量(txt文件个数)&#xff1a;4020 标注…

高性能web服务器2——Nginx概述

Nginx 概述 Nginx 是一款广泛使用的高性能 Web 和反向代理服务器&#xff0c;以其出色的并发处理能力和低内存消耗而闻名。自 2004 年首次发布以来&#xff0c;Nginx 已经成为许多企业和组织的首选 Web 服务器和负载均衡解决方案。本文将对 Nginx 进行一个全面的概述&#xff…

探索Qotom Q51251OPS迷你电脑:功能与广泛应用

Qotom Q51251 OPS&#xff08;开放可插拔规范&#xff09;迷你电脑是一款设计紧凑且功能强大的设备&#xff0c;旨在满足不同领域的多样化需求。基于英特尔Core i5-12450H Alder Lake H处理器&#xff0c;这款设备不仅具备出色的计算性能&#xff0c;还提供了丰富的连接选项&am…

电路板中的MARK点

什么是mark点&#xff0c;什么情况下有mark点 Mark点的种类 局部mark点&#xff1a;针对那些 引脚数量众多 引脚间距非常紧凑的元器件 比如说QFT封装 BGA封装 MARK点的作用 不论是 拼版还是全局mark 一般都会放上2-3个点 第三个mark点一般用于比较大的电路板或者是比较大的拼…

接口加密解决方案,Python的各种加密实现!

01、前言 在现代软件开发中&#xff0c;接口测试已经成为了不可或缺的一部分。随着互联网的普及&#xff0c;越来越多的应用程序都采用了接口作为数据传输的方式。接口测试的目的是确保接口的正确性、稳定性和安全性&#xff0c;从而保障系统的正常运行。 在接口测试中&…

TXT 记录解析怎么做?

在当今数字化的时代&#xff0c;网络技术的应用越来越广泛&#xff0c;而域名系统&#xff08;DNS&#xff09;则是网络通信中至关重要的一部分。TXT 记录作为 DNS 中的一种记录类型&#xff0c;有着特定的用途和解析方法。 那么&#xff0c;TXT 记录解析究竟该怎么做呢&#…