- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
该函数用于在 GPU 上交换图像的通道顺序(例如将 BGR 图像转为 RGB)。
它适用于多通道图像(如 3 通道或 4 通道),可以自定义输出通道的排列顺序。
函数原型
cpp
void cv::cuda::swapChannels
(
InputOutputArray image,
const int dstOrder[4],
Stream & stream = Stream::Null()
)
参数
参数 | 类型 | 描述 |
---|---|---|
image | InputOutputArray | 输入/输出图像。必须是 3 或 4 通道的 8 位、16 位、32 位图像。 |
dstOrder | const int[4] | 目标通道顺序数组,指定每个输出通道来自输入的哪个索引(0-based)。 |
stream | Stream& | CUDA 流对象,用于异步执行。默认为 Stream::Null(),即同步执行。 |
代码示例
cpp
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>
int main()
{
// 加载图像(假设是 BGR 格式)
cv::Mat h_src = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png" );
if ( h_src.empty() )
{
std::cerr << "无法加载图像!" << std::endl;
return -1;
}
// 将 3 通道图像转换为 4 通道 BGRA
cv::Mat h_rgba;
cv::cvtColor( h_src, h_rgba, cv::COLOR_BGR2BGRA );
// 上传到 GPU
cv::cuda::GpuMat d_src, d_dst;
d_src.upload( h_rgba );
// 设置目标通道顺序:BGR -> RGB
int dstOrder[ 4 ] = { 2, 1, 0 };
// 执行通道交换
cv::cuda::swapChannels( d_src, dstOrder ); // 输出结果写回 d_src 自身
// 下载结果
cv::Mat h_dst;
d_src.download( h_dst );
// 显示或保存
cv::imshow( "Swapped Channels", h_dst );
cv::imwrite( "output_rgb.jpg", h_dst );
cv::waitKey( 0 );
return 0;
}
运行结果
