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

OpenCV CUDA模块中逐元素操作------数学函数

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

算法描述

在OpenCV的CUDA模块中,确实存在一系列用于执行逐元素数学运算的函数,包括指数、对数、平方根等。这些函数对于高级图像处理算法非常有用,比如计算图像梯度幅值时可能用到的平方根操作。

主要函数

1. 指数 - cv::cuda::exp

描述:计算每个数组元素的自然指数(e的幂)。
#### 函数原型
 void cv::cuda::exp(InputArray src, OutputArray dst, Stream& stream = Stream::Null());
参数
  • src: 输入数组。
  • dst: 输出数组。
  • stream: CUDA流用于异步执行(可选)。

2. 对数 - cv::cuda::log

描述:计算每个数组元素的自然对数。

函数原型:与cv::cuda::exp类似,但执行的是对数操作。

3. 平方根 - cv::cuda::sqrt

描述:计算每个数组元素的平方根。
函数原型

void cv::cuda::sqrt
(
InputArray src,
OutputArray dst,
Stream& stream = Stream::Null()
);

参数
  • src: 输入数组。
  • dst: 输出数组。
  • stream: CUDA流用于异步执行(可选)。

代码示例

#include <iostream>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/opencv.hpp>int main()
{// 创建一个测试图像(单通道浮点型)cv::Mat h_image = cv::Mat::ones( 512, 512, CV_32FC1 );h_image( cv::Rect( 100, 100, 100, 100 ) ).setTo( cv::Scalar( 0.5 ) );h_image( cv::Rect( 300, 300, 100, 100 ) ).setTo( cv::Scalar( 2.0 ) );// 上传到GPUcv::cuda::GpuMat d_image;d_image.upload( h_image );// 结果GPU矩阵cv::cuda::GpuMat d_exp_result, d_log_result, d_sqrt_result;// 指数运算cv::cuda::exp( d_image, d_exp_result );// 对数运算(加1防止log(0))cv::cuda::GpuMat d_temp;cv::cuda::add( d_image, cv::Scalar( 1.0 ), d_temp );  // 替代 d_image + 1.0cv::cuda::log( d_temp, d_log_result );// 平方根cv::cuda::sqrt( d_image, d_sqrt_result );// sin / cos 需要回到CPU执行cv::Mat h_sin_result, h_cos_result;// 先下载回CPUcv::Mat h_exp_result, h_log_result, h_sqrt_result;d_exp_result.download( h_exp_result );d_log_result.download( h_log_result );d_sqrt_result.download( h_sqrt_result );cv::Mat h_data;d_image.download( h_data );// 显示结果cv::imshow( "Original", h_data / 2.0 );cv::imshow( "Exp", h_exp_result );cv::imshow( "Log", h_log_result );cv::imshow( "Sqrt", h_sqrt_result );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

相关文章:

  • HDMI信号采集器连OBS没有声音的问题
  • 盒带自编教材《软件工程》目录
  • 计算机网络:蜂窝网络和WiFi网络使用的射频信号有什么区别?
  • 计算机网络:什么是电磁波以及有什么危害?
  • Spring框架的事务管理
  • 每日算法-250515
  • ProfibusDP主站转ModbusRTU/TCP与横河AXG电磁流量计通讯案例
  • 麒麟系统ARM64架构部署mysql、jdk和java项目
  • docker(四)使用篇一:docker 镜像仓库
  • 【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最大化、最小化Vs界面
  • 2025长三角杯数学建模A题:智能手机产品设计优化与定价问题,赛题发布与思路分析
  • 搭建Centos环境安装禅道
  • 深度解析 Meta 开源 MR 项目《North Star》:从交互到渲染的沉浸式体验设计
  • Python 类变量与实例变量完全指南:区别、使用场景及常见陷阱
  • 兰亭妙微B端UI设计:融合多元风格,点亮品牌魅力
  • 什么是接口文档,如何使用,注意事项有哪些
  • 51c~C语言~合集5
  • SQL:MySQL函数:空值处理函数(NULL Handling Functions)
  • Uniapp中小程序调用腾讯地图(获取定位地址)
  • 【向量维度如何选择?】
  • 因港而兴,“长江黄金水道”上的宜宾故事
  • 30平米的无障碍酒吧里,我们将偏见折叠又摊开
  • 浙能集团原董事长童亚辉被查,还是杭州市书法家协会主席
  • 一个多月来上海交大接连“牵手”三区,在这些方面进行区校合作
  • 安徽省委常委、合肥市委书记费高云卸任副省长职务
  • 习近平在中拉论坛第四届部长级会议开幕式的主旨讲话(全文)