OpenCV CUDA模块图像变形------对图像进行GPU加速的透视变换函数warpPerspective()

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

算法描述

该函数用于对图像进行 GPU 加速的透视变换(Perspective Transformation),是 cv::warpPerspective 的 CUDA 版本。支持任意角度的投影变换,适用于图像矫正、视角变换等场景。

函数原型

cpp 复制代码
void cv::cuda::warpPerspective 	
(
 	InputArray  	src,
	OutputArray  	dst,
	InputArray  	M,
	Size  	dsize,
	int  	flags = INTER_LINEAR,
	int  	borderMode = BORDER_CONSTANT,
	Scalar  	borderValue = Scalar(),
	Stream &  	stream = Stream::Null() 
) 		

参数

参数名 说明
src 源图像。支持像素深度为 CV_8UCV_16UCV_32SCV_32F 的图像,通道数为 1、3 或 4。
dst 目标图像,类型与 src 相同,尺寸为 dsize
M 3x3 的透视变换矩阵(Mat 或 UMat 类型)。
dsize 输出图像的尺寸(宽 x 高)。
flags 插值方法组合(参考 resize 函数),以及可选标志 WARP_INVERSE_MAP,表示 M 是一个逆变换(即从目标图像到源图像的映射)。仅支持 INTER_NEARESTINTER_LINEARINTER_CUBIC 插值方法。
borderMode 像素外推方法(边界填充方式)。
borderValue 当边界模式为 BORDER_CONSTANT 时使用的填充值,默认为黑色(0)。
stream 用于异步版本的 CUDA 流对象。

代码示例

cpp 复制代码
#include <opencv2/cudawarping.hpp>
#include <opencv2/opencv.hpp>

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

    // 上传到 GPU
    cv::cuda::GpuMat d_src, d_dst;
    d_src.upload( h_src );

    // 定义源图像中的四个点和目标图像中的对应点
    cv::Point2f srcPoints[ 4 ] = { { 0, 0 }, { h_src.cols - 1, 0 }, { 0, h_src.rows - 1 }, { h_src.cols - 1, h_src.rows - 1 } };

    cv::Point2f dstPoints[ 4 ] = {
        { h_src.cols * 0.1f, h_src.rows * 0.1f }, { h_src.cols * 0.9f, h_src.rows * 0.2f }, { h_src.cols * 0.2f, h_src.rows * 0.8f }, { h_src.cols * 0.8f, h_src.rows * 0.9f }
    };

    // 构造透视变换矩阵
    cv::Mat M = cv::getPerspectiveTransform( srcPoints, dstPoints );

    // 设置输出尺寸
    cv::Size dsize( h_src.cols, h_src.rows );

    // 执行透视变换
    cv::cuda::warpPerspective( d_src, d_dst, M, dsize, cv::INTER_LINEAR );

    // 下载并显示结果
    cv::Mat h_dst;
    d_dst.download( h_dst );
    cv::imshow( "Original Image", h_src );
    cv::imshow( "Warped Perspective Image", h_dst );
    cv::waitKey( 0 );

    return 0;
}

运行结果

相关推荐
蓑雨春归14 分钟前
探索Agent的发展潜力:大模型与具身智能的融合
人工智能
每日新鲜事1 小时前
Lavazza拉瓦萨再度牵手兰博基尼汽车 百年咖啡注入超跑速度
人工智能
道传科技上位机1 小时前
机器视觉标定讲解
计算机视觉
说私域1 小时前
传统企业数字化转型:以定制开发开源 AI 智能名片 S2B2C 商城小程序源码为核心的销售环节突破
大数据·人工智能·开源
geneculture2 小时前
社会应用融智学的人力资源模式:潜能开发评估;认知基建资产
人工智能·课程设计·融智学的重要应用·三级潜能开发系统·人力资源升维·认知基建·认知银行
仙人掌_lz4 小时前
Qwen-3 微调实战:用 Python 和 Unsloth 打造专属 AI 模型
人工智能·python·ai·lora·llm·微调·qwen3
美林数据Tempodata6 小时前
大模型驱动数据分析革新:美林数据智能问数解决方案破局传统 BI 痛点
数据库·人工智能·数据分析·大模型·智能问数
硅谷秋水6 小时前
NORA:一个用于具身任务的小型开源通才视觉-语言-动作模型
人工智能·深度学习·机器学习·计算机视觉·语言模型·机器人
whoarethenext6 小时前
使用 C/C++的OpenCV 裁剪 MP4 视频
c语言·c++·opencv
正儿八经的数字经6 小时前
人工智能100问☞第46问:AI是如何“学习”的?
人工智能·学习