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

OpenCV CUDA模块图像变形------ 构建仿射变换的映射表函数buildWarpAffineMaps()

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

算法描述

该函数根据给定的仿射变换矩阵 M,生成两个映射表 xmap 和 ymap。这两个映射表描述了目标图像中每个像素在源图像中的对应坐标,可用于后续的图像变形操作(例如图像旋转、平移、缩放等)。

这个函数是 GPU 加速版本,适用于在 CUDA 环境下进行高性能图像变换处理。

函数原型

void cv::cuda::buildWarpAffineMaps 	
(InputArray  	M,bool  	inverse,Size  	dsize,OutputArray  	xmap,OutputArray  	ymap,Stream &  	stream = Stream::Null() 
) 		

参数

参数名类型/说明
M2x3 的 Mat 或 UMat 变换矩阵。
inverse标志位,指定 M 是逆变换(即从目标图像到源图像的映射)。
dsize目标图像的尺寸。
xmapX 坐标的映射值,类型为 CV_32FC1
ymapY 坐标的映射值,类型为 CV_32FC1
stream用于异步操作的 CUDA 流对象,默认为 Stream::Null()

代码示例

#include <opencv2/opencv.hpp>
#include <opencv2/cudaimgproc.hpp>  // 包含 buildWarpAffineMaps
#include <opencv2/cudawarping.hpp>  // 包含 remapint main()
{// 读取图像cv::Mat h_src = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/lenna.png", cv::IMREAD_COLOR);if (h_src.empty()) {std::cerr << "无法加载图像!" << std::endl;return -1;}// 上传图像到 GPUcv::cuda::GpuMat d_src, d_dst;d_src.upload(h_src);// 定义仿射变换矩阵:绕中心旋转 45 度 + 缩放 0.5cv::Point2f src_center(h_src.cols / 2.0F, h_src.rows / 2.0F);cv::Mat M = cv::getRotationMatrix2D(src_center, 45, 0.5);  // 2x3 矩阵// 设置输出图像尺寸cv::Size dsize(h_src.cols, h_src.rows);// 创建映射表cv::cuda::GpuMat d_xmap, d_ymap;cv::cuda::buildWarpAffineMaps(M, false, dsize, d_xmap, d_ymap);// 使用 remap 执行图像变换cv::cuda::remap(d_src, d_dst, d_xmap, d_ymap, cv::INTER_LINEAR);// 下载结果cv::Mat h_dst;d_dst.download(h_dst);// 显示结果cv::imshow("Original Image", h_src);cv::imshow("Transformed Image", h_dst);cv::waitKey(0);return 0;
}

运行结果

在这里插入图片描述

http://www.xdnf.cn/news/13553.html

相关文章:

  • Python文件读写操作详解:从基础到实战
  • 【笔记】NVIDIA AI Workbench 中安装 PyTorch
  • Monkey 测试的基本概念及常用命令(Android )
  • 网络安全中对抗性漂移的多智能体强化学习
  • 硬件测试 图吧工具箱分享(附下载链接)
  • 亚马逊商品数据实时获取方案:API 接口开发与安全接入实践
  • 安卓上架华为应用市场、应用宝、iosAppStore上架流程,保姆级记录(1)
  • MySQL 8配置文件详解
  • 数据淘金时代:公开爬取如何避开法律雷区?
  • 杉山将(Sugiyama Masa)《图解机器学习》
  • 重拾前端基础知识:CSS预处理器
  • 计算机视觉与深度学习 | 基于Matlab的低照度图像增强算法原理,公式及实现
  • 第二节:Vben Admin v5 (vben5) Python-Flask 后端开发详解(附源码)
  • 记一次nacos搭建
  • leetcode0684. 冗余连接-medium
  • kafka-生产者(day-2)
  • 【Pandas】pandas DataFrame notna
  • 14.计算机网络End
  • 使用 C++ 和 OpenCV 构建智能答题卡识别系统
  • mysql知识点3--创建和使用数据库
  • 【图纸管理教程-2】工厂图纸混乱,用PLM怎么搜索数据?
  • 【医学目标检测】LN-DETR:一种基于多尺度特征融合的肺结节检测高效Transformer架构
  • 中兴B860AV1.1强力降级固件包
  • Spring Boot + MyBatis Plus 项目中,entity和 XML 映射文件的查找机制
  • Traefik 可观测性最佳实践
  • Windows 系统中修改文件默认打开方式
  • Shuffle流程
  • enumerable 和 configurable 属性详解
  • Vision Prompt Tune(视觉提示微调)
  • 如何在同一台电脑上安装并运行多个版本的 IntelliJ IDEA