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

OpenCV 的 CUDA 模块中用于将一个多通道 GpuMat 图像拆分成多个单通道图像的函数split()

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

算法描述

cv::cuda::split 是 OpenCV CUDA 模块中的一个函数,用于将一个多通道的 GpuMat 图像拆分成多个单通道的 GpuMat 图像。这个函数是 CPU 版本 cv::split 的 GPU 加速版本,适用于在 GPU 上高效执行图像通道分离操作。

函数原型

void cv::cuda::split
(InputArray src,   // 输入:多通道 GpuMat 图像GpuMat* dst,      // 输出:指向多个单通道 GpuMat 的指针数组Stream& stream = Stream::Null()  // 可选的 CUDA 流对象,默认使用默认流
);

参数

  • src (InputArray): 输入的多通道 GpuMat 图像。例如,一个三通道 BGR 图像或四通道 BGRA 图像。
  • dst (GpuMat*): 指向存储输出单通道 GpuMat 图像的数组。该数组的大小应等于输入图像的通道数。每个元素对应输入图像的一个通道。
  • stream (Stream&): CUDA 流对象,用于控制异步执行。如果不指定,则使用默认流(同步执行)。

使用示例

以下是一个完整的示例代码,展示了如何使用 cv::cuda::split 将一个三通道 BGR 图像拆分为三个单通道图像:

#include <iostream>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/opencv.hpp>int main()
{// 读取一张图片并上传到 GPUcv::Mat src_host = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png" );  // 替换为你自己的图片路径if ( src_host.empty() ){std::cerr << "无法读取图像" << std::endl;return -1;}cv::cuda::GpuMat src_gpu;src_gpu.upload( src_host );// 创建一个数组来存储每个通道的 GpuMatint num_channels = src_host.channels();cv::cuda::GpuMat channels[ 3 ];  // 对于BGR图像,我们有3个通道// 调用 cuda::split 分离通道cv::cuda::split( src_gpu, channels );  // 默认同步执行// 下载各个通道回 CPU 并显示for ( int i = 0; i < num_channels; ++i ){cv::Mat channel;channels[ i ].download( channel );std::string window_name = "Channel " + std::to_string( i );cv::imshow( window_name, channel );}cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

http://www.xdnf.cn/news/405559.html

相关文章:

  • 【AI News | 20250512】每日AI进展
  • 一键生成达梦、Oracle、MySQL 数据库 ER 图!解锁高效数据库设计!
  • 【LeetCode】49.字母异位词分组
  • 典籍知识问答重新生成和消息修改Bug修改
  • 从零搭建AI工作站:Gemma3大模型本地部署+WebUI配置全套方案
  • sqlmap使用入门
  • Linux 系统中设置开机启动脚本
  • AAAI-2025 | 中科院无人机导航新突破!FELA:基于细粒度对齐的无人机视觉对话导航
  • 【JAVA】业务系统订单号,流水号生成规则工具类
  • python练习-20250512
  • C++23 views::slide (P2442R1) 深入解析
  • AnaTraf:深度解析网络性能分析(NPM)
  • C语言:深入理解指针(3)
  • 基于 Nexus 在 Dockerfile 配置 yum, conda, pip 仓库的方法和参考
  • T2000云腾边缘计算盒子在数猪场景中的应用|YOLOv8+NodeRED
  • 湖北理元理律师事务所:企业债务危机的“止血”与“造血”平衡术
  • 01背包和完全背包
  • 基于Qt6 + MuPDF在 Arm IMX6ULL运行的PDF浏览器——MuPDF Tools
  • 大项目k8s集群有多大规模,多少节点,有多少pod
  • 智能指针入门:深入理解 C++ 的 shared_ptr
  • AI中的MCP是什么?MCP的作用及未来方向预测 (使用go-zero 快速搭建MCP服务器)
  • 2025年北京市积分落户申报
  • 经典案例 | 智能眼镜中瞳距调节和近视调节的应用
  • web 自动化之 Unittest 四大组件
  • 【NextPilot日志移植】ULog
  • 文档外发安全:企业数据防护的最后一道防线
  • RabbitMQ 工作模式
  • JWT的介绍与在Fastapi框架中的应用
  • 单片机-STM32部分:13-1、蜂鸣器
  • 常用依赖文件库