当前位置: 首页 > 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;
}

运行结果

原始图:

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


http://www.mrgr.cn/news/7617.html

相关文章:

  • WPS将文字文档朗读
  • webpack--webpack的启用
  • 使用ftl文件导出时,多层嵌套循环
  • Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
  • 微信小程序--31(todolist案例)
  • 电商场景的视频生成的prompt测评集合
  • Python---类
  • 请说一下单例模式的概念及应用场景
  • Redis内存淘汰
  • 【Oracle点滴积累】解决ORA-29913和KUP-04095: preprocessor command的方法
  • Linux简单介绍(1)
  • WPS宏实现表格合并功能
  • MYSQL -NATURAL JOIN ,exist 函数
  • 【数据结构4】树的实例-模拟文件系统、二叉树的遍历(先序遍历、中序遍历、后序遍历、层次遍历)
  • JAVA案例之使用接口实现手机功能
  • 也开发一点自己的agent框架
  • Linux下进程间的通信--消息队列
  • 如何给两台机器集群设置VIP(虚拟IP)
  • 空状态设计教程:连接用户体验的桥梁
  • Redis之快速入门