OpenCV CUDA模块中矩阵操作------分布统计类

news2025/5/18 21:55:51
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

在 OpenCV 的 CUDA 模块中,meanStdDev 函数用于计算矩阵的平均值(Mean)和标准差(StdDev)。这些函数支持同步和异步调用,并且可以接受一个可选的掩码参数来限制计算范围。

函数原型

  1. 同步版本
 void cv::cuda::meanStdDev(InputArray src, Scalar &mean, Scalar &stddev, InputArray mask)

计算带掩码的 GPU 矩阵的平均值和标准差。

 void cv::cuda::meanStdDev(InputArray mtx, Scalar &mean, Scalar &stddev)

计算无掩码的 GPU 矩阵的平均值和标准差。

  1. 异步版本
void cv::cuda::meanStdDev(InputArray src, OutputArray dst, InputArray mask, Stream &stream=Stream::Null())

异步计算带掩码的 GPU 矩阵的平均值和标准差,结果存储在 OutputArray 中。

  void cv::cuda::meanStdDev(InputArray mtx, OutputArray dst, Stream &stream=Stream::Null())

异步计算无掩码的 GPU 矩阵的平均值和标准差,结果存储在 OutputArray 中。

参数

  • InputArray src/mtx: 输入的 GPU 矩阵。
  • Scalar &mean/stddev: 输出的平均值和标准差。
  • InputArray mask: 可选的掩码矩阵,指定哪些元素参与计算,默认为整个矩阵。
  • OutputArray dst: 输出的结果矩阵,通常是一个包含两个 cv::Scalar 值的 GpuMat。
  • Stream &stream: 可选的 CUDA 流对象,用于异步执行,默认使用主线程流。

示例代码

下面是一个完整的 C++ 示例代码,演示了如何使用上述四个函数:

#include <opencv2/opencv.hpp>
#include <opencv2/cudaarithm.hpp>
#include <iostream>

int main() {
    // 创建一个测试矩阵
    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);

    // 创建一个掩码矩阵(仅允许右下角区域参与计算)
    cv::Mat h_mask = cv::Mat::zeros(h_mat.size(), CV_8UC1);
    cv::rectangle(h_mask, cv::Rect(2, 2, 1, 1), cv::Scalar(255), cv::FILLED); // 右下角像素

    // 上传到 GPU
    cv::cuda::GpuMat d_mat, d_mask;
    d_mat.upload(h_mat);
    d_mask.upload(h_mask);

    // 存储异步结果的 GpuMat
    cv::cuda::GpuMat d_result;

    // 创建 CUDA 流
    cv::cuda::Stream stream;

    // 同步版本 ————————————————————————————————

    // 1. 带掩码的 mean 和 stddev
    cv::Scalar mean, stddev;
    cv::cuda::meanStdDev(d_mat, mean, stddev, d_mask);
    std::cout << "Sync Mean with mask: " << mean << std::endl;
    std::cout << "Sync StdDev with mask: " << stddev << std::endl;

    // 2. 不带掩码的 mean 和 stddev
    cv::cuda::meanStdDev(d_mat, mean, stddev);
    std::cout << "Sync Mean without mask: " << mean << std::endl;
    std::cout << "Sync StdDev without mask: " << stddev << std::endl;

    // 异步版本 ————————————————————————————————

    // 3. 异步:带掩码的 mean 和 stddev
    cv::cuda::meanStdDev(d_mat, d_result, d_mask, stream);
    stream.waitForCompletion();

    cv::Mat host_result;
    d_result.download(host_result);
    cv::Scalar async_mean = host_result.at<double>(0, 0);
    cv::Scalar async_stddev = host_result.at<double>(1, 0);
    std::cout << "Async Mean with mask: " << async_mean << std::endl;
    std::cout << "Async StdDev with mask: " << async_stddev << std::endl;

    // 4. 异步:不带掩码的 mean 和 stddev
    cv::cuda::meanStdDev(d_mat, d_result, stream);
    stream.waitForCompletion();

    d_result.download(host_result);
    async_mean = host_result.at<double>(0, 0);
    async_stddev = host_result.at<double>(1, 0);
    std::cout << "Async Mean without mask: " << async_mean << std::endl;
    std::cout << "Async StdDev without mask: " << async_stddev << std::endl;

    return 0;
}

运行结果

Sync Mean with mask: [9, 0, 0, 0]
Sync StdDev with mask: [0, 0, 0, 0]
Sync Mean without mask: [5, 0, 0, 0]
Sync StdDev without mask: [2.58199, 0, 0, 0]
Async Mean with mask: [9, 0, 0, 0]
Async StdDev with mask: [0, 0, 0, 0]
Async Mean without mask: [5, 0, 0, 0]
Async StdDev without mask: [0, 0, 0, 0]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2378805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenWebUI新突破,MCPO框架解锁MCP工具新玩法

大家好&#xff0c;Open WebUI 迎来重要更新&#xff0c;现已正式支持 MCP 工具服务器&#xff0c;但 MCP 工具服务器需由兼容 OpenAPI 的代理作为前端。mcpo 是一款实用代理&#xff0c;经测试&#xff0c;它能让开发者使用 MCP 服务器命令和标准 OpenAPI 服务器工具&#xff…

TRTC实时对话式AI解决方案,助力人机语音交互极致体验

近年来&#xff0c;AI热度持续攀升&#xff0c;无论是融资规模还是用户热度都大幅增长。2023 年&#xff0c;中国 AI 行业融资规模达2631亿人民币&#xff0c;较2022年上升51%&#xff1b;2024年第二季度&#xff0c;全球 AI 初创企业融资规模为 240 亿美金&#xff0c;较第一季…

Linux安全篇 --firewalld

一、Firewalld 防火墙概述 1、Firewalld 简介 firewalld 的作用是为包过滤机制提供匹配规则(或称为策略)&#xff0c;通过各种不同的规则告诉netfilter 对来自指定源、前往指定目的或具有某些协议特征的数据包采取何种处理方式为了更加方便地组织和管理防火墙,firewalld 提供…

系分论文《论系统需求分析方法及应用》

系统分析师论文范文系列 【摘要】 2022年6月&#xff0c;我作为系统分析师参与了某金融机构“智能信贷风控系统”的建设项目。该系统旨在通过对业务流程的数字化重构&#xff0c;优化信贷审批效率并降低风险。项目涉及信贷申请、资质审核、风险评估、额度审批等核心流程&#x…

LIIGO ❤️ RUST: 12 YEARS

LIIGO &#x1f496; RUST: 12 YEARS 今天是RUST语言1.0发布十周年纪念日。十年前的今天&#xff0c;2015年的今天&#xff0c;Rust 1.0 正式发行。这是值得全球Rust支持者隆重纪念的日子。我借此机会衷心感谢Rust语言创始人Graydon Hoare&#xff0c;Mozilla公司&#xff0c;…

Trivy:让你时刻掌控的开源安全扫描器

深入了解 Trivy:全面的安全扫描工具 在如今互联网快速发展的时代,软件的安全性显得尤为重要。随着应用程序的复杂性增加,其可能带来的安全漏洞也在不断增多。如何快速、准确地发现这些潜在威胁是每个开发者和运维人员心中的课题。今天,我们将为大家介绍一个开源的安全扫描…

LlamaIndex 第八篇 MilvusVectorStore

本指南演示了如何使用 LlamaIndex 和 Milvus 构建一个检索增强生成&#xff08;RAG&#xff09;系统。 RAG 系统将检索系统与生成模型相结合&#xff0c;根据给定的提示生成新的文本。该系统首先使用 Milvus 等向量相似性搜索引擎从语料库中检索相关文档&#xff0c;然后使用生…

2022河南CCPC(前四题)

签到题目 #include <bits/stdc.h> using namespace std; #define int long long #define PII pair<int,int> #define fi first #define se second #define endl \n #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);void solve() {int n;cin>>…

谷歌浏览器(Google Chrome)136.0.7103.93便携增强版|Win中文|安装教程

软件下载 【名称】&#xff1a;谷歌浏览器&#xff08;Google Chrome&#xff09;136.0.7103.93 【大小】&#xff1a;170M 【语言】&#xff1a;简体中文 【安装环境】&#xff1a;Win10/Win11 【夸克网盘下载链接】&#xff08;务必手机注册&#xff09;&#xff1a; h…

高可用消息队列实战:AWS SQS 在分布式系统中的核心解决方案

引言&#xff1a;消息队列的“不可替代性” 在微服务架构和分布式系统盛行的今天&#xff0c;消息队列&#xff08;Message Queue&#xff09; 已成为解决系统解耦、流量削峰、异步处理等难题的核心组件。然而&#xff0c;传统的自建消息队列&#xff08;如RabbitMQ、Kafka&am…

「Mac畅玩AIGC与多模态41」开发篇36 - 用 ArkTS 构建聚合搜索前端页面

一、概述 本篇基于上一节 Python 实现的双通道搜索服务&#xff08;聚合 SearxNG 本地知识库&#xff09;&#xff0c;构建一个完整的 HarmonyOS ArkTS 前端页面。用户可在输入框中输入关键词&#xff0c;实时查询本地服务 http://localhost:5001/search?q...&#xff0c;返…

springCloud/Alibaba常用中间件之Seata分布式事务

文章目录 SpringCloud Alibaba:依赖版本补充Seata处理分布式事务(AT模式)AT模式介绍核心组件介绍AT的工作流程&#xff1a;两阶段提交&#xff08;**2PC**&#xff09; Seata-AT模式使用Seata(2.0.0)下载、配置和启动Seata案例实战前置代码添加全局注解 GlobalTransactional Sp…

Datawhale FastAPI Web框架5月第1次笔记

原课程地址&#xff1a; FastAPI Web框架https://www.datawhale.cn/learn/summary/164本次难点&#xff1a; 切换python的版本为3.10 作业过程 启动&#xff1a; jupyter notebook 首先我们要确保自己的python版本是3.10 import sys print(sys.version) 第一个fastapi…

操作系统:os概述

操作系统&#xff1a;OS概述 程序、进程与线程无极二级目录三级目录 程序、进程与线程 指令执行需要那些条件&#xff1f;CPU内存 需要数据和 无极 二级目录 三级目录

LLaMA-Factory:环境准备

一、硬件和系统 操作系统: Ubuntu 24.04.2 LTS&#xff08;64位&#xff09;GPU: NVIDIA RTX 4090 笔记本 GPU&#xff0c;16GB显存CPU: 建议高性能多核 CPU&#xff08;如 Intel i7/i9 或 AMD Ryzen 7/9&#xff09;以支持数据预处理&#xff0c;我的是32核。RAM: 至少 32GB&…

ArrayList-集合使用

自动扩容&#xff0c;集合的长度可以变化&#xff0c;而数组长度不变&#xff0c;集合更加灵活。 集合只能存引用数据类型&#xff0c;不能直接存基本数据类型&#xff0c;除非包装 ArrayList会拿[]展示数据

一分钟用 MCP 上线一个 贪吃蛇 小游戏(CodeBuddy版)

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 你好&#xff0c;我是悟空。 背景 上篇我们用 MCP 上线了一个 2048 小游戏&#xff0c;这次我们继续做一个 …

TTS:F5-TTS 带有 ConvNeXt V2 的扩散变换器

1&#xff0c;项目简介 F5-TTS 于英文生成领域表现卓越&#xff0c;发音标准程度在本次评测软件中独占鳌头。再者&#xff0c;官方预设的多角色生成模式独具匠心&#xff0c;能够配置多个角色&#xff0c;一次性为多角色、多情绪生成对话式语音&#xff0c;别出心裁。 最低配置…

大型语言模型中的QKV与多头注意力机制解析

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

基于地图的数据可视化:解锁地理数据的真正价值

目录 一、基于地图的数据可视化概述 &#xff08;一&#xff09;定义与内涵 &#xff08;二&#xff09;重要性与意义 二、基于地图的数据可视化的实现方式 &#xff08;一&#xff09;数据收集与整理 &#xff08;二&#xff09;选择合适的可视化工具 &#xff08;三&a…