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()
{
    // 读取一张图片并上传到 GPU
    cv::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 );

    // 创建一个数组来存储每个通道的 GpuMat
    int 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;
}

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村北头的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值