OpenCV 中 cv::split() 的最基础用法

张开发
2026/6/17 9:32:56 15 分钟阅读
OpenCV 中 cv::split() 的最基础用法
OpenCV 中cv::split()的最基础用法一、cv::split()是干什么的一句话把一张多通道图像拆成好几个单通道图像。比如3通道彩色图RGB/BGR→ 拆成R、G、B 三张灰度图4通道带透明度→ 拆成R、G、B、A二、最基本用法标准格式// 把 image 拆分成多个单通道图像放进 channels 里voidcv::split(constcv::Matimage,// 输入多通道图像比如3通道彩色图std::vectorcv::Matchannels// 输出每个单通道图像vector装);三、超级简单例子一看就会例子1把彩色图拆成 R、G、B// 1. 读取一张彩色图片cv::Mat imagecv::imread(test.jpg);// 3通道 BGR// 2. 创建一个vector用来装拆出来的3个通道vectorcv::Matchannels;// 3. 拆分cv::split(image,channels);// 现在// channels[0] B 通道灰度图// channels[1] G 通道灰度图// channels[2] R 通道灰度图结果一张彩色图 → 变成三张灰度图。四、另一种写法数组写法你代码里用的就是这种cv::Mat channels[3];cv::split(image,channels);效果完全一样只是用数组存。五、最重要的知识点你必须懂split做了什么输入图像3通道的内存排布B G B G B G B G ...split 之后channels[0] B B B B B B channels[1] G G G G G G channels[2] R R R R R R一句话split 把交织在一起的通道分开成连续的单通道。六、你现在再看你原来的代码// 1. 先给 ms 里每个 mat 绑定好 Tensor 的内存地址只是指路ms[i]cv::Mat(height,width,CV_32F,cpufloat(n,i));// 2. 然后 split 把图像拆开放进这些地址里cv::split(image,ms[0]);现在是不是彻底懂了先准备好 3 个空的单通道 Mat指向Tensorsplit 把彩色图拆开直接写入这 3 个 Mat因为 Mat 指向 Tensor所以数据直接进 Tensor超级精简总结cv::split(输入多通道图, 输出单通道数组)功能把彩色图拆成 R、G、B 三个灰度图你代码里的用途拆通道 直接写入Tensor内存

更多文章