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

OpenCV CUDA模块中的矩阵算术运算------创建卷积操作对象的工厂方法 cv::cuda::createConvolution

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

算法描述

createConvolution函数是OpenCV CUDA 模块中用于创建卷积操作对象的工厂方法。它返回一个指向 cv::cuda::Convolution 接口的智能指针(cv::Ptr),该接口可以执行高效的 GPU 卷积操作。

函数原型

cv::Ptr<cv::cuda::Convolution> cv::cuda::createConvolution
(cv::Size user_block_size = cv::Size()
)

参数说明

参数名类型默认值说明
user_block_sizecv::Sizecv::Size()(即自动选择)可选参数,指定在 GPU 上执行卷积时使用的线程块大小(block size)。如果不设置,则由 OpenCV 自动选择最优值。

功能说明

该函数会根据当前设备环境和性能优化策略,动态选择并实例化一个具体的卷积实现类(如基于 FFT 或直接卷积算法),然后返回其接口指针。

你可以通过这个指针调用 convolve(…) 方法进行卷积运算:

cv::Ptr<cv::cuda::Convolution> conv = cv::cuda::createConvolution();
conv->convolve(src, kernel, dst);

代码示例

include <iostream>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/opencv.hpp>int main()
{// 读取图像并上传到 GPUcv::Mat h_img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE );if ( h_img.empty() ){std::cerr << "Image load failed!" << std::endl;return -1;}// 将图像转换为单通道 32 位浮点数格式cv::Mat h_img_float;h_img.convertTo( h_img_float, CV_32F );cv::cuda::GpuMat d_img;d_img.upload( h_img_float );  // 上传转换后的图像// 定义卷积核(例如 Sobel x 方向)cv::Mat kernel = ( cv::Mat_< float >( 3, 3 ) << -1, 0, 1, -2, 0, 2, -1, 0, 1 );cv::cuda::GpuMat d_kernel;d_kernel.upload( kernel );// 创建卷积对象(使用默认 block size)cv::Ptr< cv::cuda::Convolution > conv = cv::cuda::createConvolution();// 输出矩阵cv::cuda::GpuMat d_result;// 执行卷积操作(false 表示卷积;true 表示互相关)conv->convolve( d_img, d_kernel, d_result, false );// 下载结果cv::Mat h_result;d_result.download( h_result );// 归一化显示cv::Mat h_result_normalized;h_result.convertTo( h_result_normalized, CV_8U, 255.0 / h_result.rows );  // 简单归一化以适应显示范围cv::imshow( "GPU Convolution Result", h_result_normalized );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

相关文章:

  • 批量剪辑 + 矩阵分发 + 数字人分身源码搭建全技术解析,支持OEM
  • Linux 判断是否有未挂载的盘 分区挂载 (挂载所有大小的盘,包括挂载超过2T的盘)
  • Qt框架核心组件完全指南:从按钮交互到定时器实现
  • Regmap子系统之六轴传感器驱动-编写icm20607.c驱动
  • 基于STM32的光照测量报警Proteus仿真设计+程序设计+设计报告+讲解视频
  • 供应链风险管理中,企业如何识别关键风险因素?
  • 【C++】模版(1)
  • 机器学习--特征工程具体案例
  • 2022年下半年信息系统项目管理师——综合知识真题及答案(4)
  • WPF Data Binding 及经典应用示例
  • 《黑马前端ajax+node.js+webpack+git教程》(笔记)——node.js教程+webpack教程(nodejs教程)
  • 【占融数科-注册/登录安全分析报告】
  • Kotlin Compose Button 实现长按监听并实现动画效果
  • Text2SQL在Spark NLP中的实现与应用:将自然语言问题转换为SQL查询的技术解析
  • 深度学习---模型预热(Model Warm-Up)
  • 【实战】GPT-SoVITS+内网穿透:3分钟搭建可公网访问的语音克隆系统
  • 苍穹外卖 - Day03
  • 【AI News | 20250519】每日AI进展
  • 深度强化学习 | 基于SAC算法的移动机器人路径跟踪(附Pytorch实现)
  • Manus AI 突破多语言手写识别技术壁垒:创新架构、算法与应用解析
  • 俄方确认普京与特朗普将于今晚通话
  • 宫崎骏的折返点
  • 哈马斯与以色列在多哈举行新一轮加沙停火谈判
  • 竞彩湃|足总杯决赛或有冷门,德甲欧冠资格之争谁笑到最后
  • 摄影师|伊莎贝尔·穆尼奥斯:沿着身体进行文化溯源
  • 就规范涉企行政执法专项行动有关问题,司法部发布解答