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

OpenCV CUDA模块中矩阵操作------归一化与变换操作

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

算法描述

在 OpenCV 的 CUDA 模块中,normalize 和 rectStdDev 函数用于对矩阵进行归一化处理和基于积分图计算矩形区域的标准差。

函数介绍

1. 归一化处理normalize

函数原型
void cv::cuda::normalize
(InputArray src,           // 输入数组OutputArray dst,          // 输出数组double alpha = 1.0,       // 范围的下限或正则化因子double beta = 0.0,        // 范围的上限int norm_type = NORM_L2,  // 归一化的类型int dtype = -1,           // 输出数组的数据类型(-1 表示与输入相同)InputArray mask = noArray(), // 可选掩码Stream &stream = Stream::Null() // 可选 CUDA 流
);
参数说明
  • src: 输入 GPU 矩阵。
  • dst: 输出 GPU 矩阵。
  • alpha: 如果 norm_type 是 NORM_MINMAX,则为范围的下限;否则是正则化因子。
  • beta: 如果 norm_type 是 NORM_MINMAX,则为范围的上限。
  • norm_type: 归一化类型,如 NORM_MINMAX, NORM_L1, NORM_L2 等。
  • dtype: 输出数组的数据类型,默认为与输入相同。
  • mask: 可选掩码矩阵,指定哪些元素参与归一化。
  • stream: 可选 CUDA 流对象,用于异步执行。

2. 基于积分图计算矩形区域的标准差rectStdDev

函数原型
void cv::cuda::rectStdDev
(InputArray src,   // 输入数组InputArray sqr,   // 输入平方数组OutputArray dst,  // 输出数组Rect rect,        // 计算标准差的矩形区域Stream &stream = Stream::Null() // 可选 CUDA 流
);
参数说明
  • src: 输入 GPU 矩阵。
  • sqr: 输入 GPU 矩阵的平方值。
  • dst: 输出 GPU 矩阵。
  • rect: 定义计算标准差的矩形区域。
  • stream: 可选 CUDA 流对象,用于异步执行。

代码示例

#include <iostream>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/opencv.hpp>int main()
{// 创建一个测试矩阵(float 类型)cv::Mat h_mat = ( cv::Mat_< float >( 3, 3 ) << 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f );// 转换为 rectStdDev 支持的类型:CV_32SC1cv::Mat h_int;h_mat.convertTo( h_int, CV_32SC1 );  // float -> int// 上传到 GPUcv::cuda::GpuMat d_src;d_src.upload( h_int );// 存储归一化结果的 GpuMatcv::cuda::GpuMat d_normalized;// 创建 CUDA 流cv::cuda::Stream stream;// 归一化处理 ————————————————————————————————// 使用 NORM_MINMAX 归一化cv::cuda::normalize( d_src, d_normalized, 0.0, 1.0, cv::NORM_MINMAX, -1, cv::noArray(), stream );stream.waitForCompletion();// 下载结果cv::Mat host_normalized;d_normalized.download( host_normalized );std::cout << "Normalized Matrix: \n" << host_normalized << std::endl;// 计算矩形区域的标准差 ——————————————————————————// 手动计算平方值(注意必须为 CV_64FC1)cv::Mat h_sqr;h_int.convertTo( h_sqr, CV_64FC1 );  // 先转为 doubleh_sqr = h_sqr.mul( h_sqr );          // 平方操作// 上传平方图像cv::cuda::GpuMat d_sqr;d_sqr.upload( h_sqr );// 定义矩形区域(例如中心 2x2 区域)cv::Rect rect( 1, 1, 2, 2 );// 存储标准差结果的 GpuMatcv::cuda::GpuMat d_stddev;// 计算标准差cv::cuda::rectStdDev( d_src, d_sqr, d_stddev, rect, stream );stream.waitForCompletion();// 下载结果cv::Mat host_stddev;d_stddev.download( host_stddev );std::cout << "Standard Deviation in Rect: " << host_stddev.at< double >( 0, 0 ) << std::endl;return 0;
}

运行结果

Normalized Matrix: 
[0, 0, 0;0, 0, 1;1, 1, 1]
Standard Deviation in Rect: 11.1384
http://www.xdnf.cn/news/6672.html

相关文章:

  • window nvidia-smi命令 Failed to initialize NVML: Unknown Error
  • 【学习笔记】因果推理导论第1课
  • 3D一览通为山东融科MES系统补全车间看图能力
  • 车道线检测----CLRNet
  • Elasticsearch倒排索引核心原理面试题
  • 视频孪生智慧风电场解决方案
  • 【C++/Qt shared_ptr 与 线程池】合作使用案例
  • 模板分享:网络最小费用流
  • css:倒影倾斜效果
  • Jenkins 最佳实践
  • 从数据包到可靠性:UDP/TCP协议的工作原理分析
  • 【localstorage、sessionStorage和cookie】
  • python报错:typeerror:type object is not subcriptable问题原因及解决方案
  • socket通信中的accept函数
  • 【vue】封装接口,全局字典,表格表头及使用
  • 子查询对多层join优化记录
  • 汉诺塔超算堆栈结构编码和流程详细设计(附源代码)
  • 什么是有向图 无向图 求图的邻接矩阵 软考
  • 搭建游戏云服务器的配置要求包括哪些条件?
  • S32DS使用JLINK编译调试问题点记录
  • Nginx常用命令
  • 在24GB显存大小的GPU上运行27GB的Pytorch模型
  • 基于 Java Socket 的多线程网络聊天程序
  • 依赖倒转原则:Java 架构设计的核心准则
  • 【数据机构】2. 线性表之“链表”
  • 如何使用 Solana Yellowstone gRPC 重新连接和重放插槽
  • Leetcode76覆盖最小子串
  • 软件架构风格系列(4):事件驱动架构
  • 【八股战神篇】Java高频基础面试题
  • C++ 中,using namespace std