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

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

一、cv::split() 是干什么的?

一句话:把一张多通道图像,拆成好几个单通道图像。

比如:

  • 3通道彩色图(RGB/BGR) → 拆成 R、G、B 三张灰度图
  • 4通道带透明度 → 拆成 R、G、B、A

二、最基本用法(标准格式)

cpp 复制代码
// 把 image 拆分成多个单通道图像,放进 channels 里
void cv::split(
    const cv::Mat& image,          // 输入:多通道图像(比如3通道彩色图)
    std::vector<cv::Mat>& channels // 输出:每个单通道图像(vector装)
);

三、超级简单例子(一看就会)

例子1:把彩色图拆成 R、G、B

cpp 复制代码
// 1. 读取一张彩色图片
cv::Mat image = cv::imread("test.jpg");  // 3通道 BGR

// 2. 创建一个vector,用来装拆出来的3个通道
vector<cv::Mat> channels;

// 3. 拆分!
cv::split(image, channels);

// 现在:
// channels[0] = B 通道(灰度图)
// channels[1] = G 通道(灰度图)
// channels[2] = R 通道(灰度图)

结果:

一张彩色图 → 变成 三张灰度图


四、另一种写法(数组写法)

你代码里用的就是这种:

cpp 复制代码
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 把交织在一起的通道,分开成连续的单通道。


六、你现在再看你原来的代码

cpp 复制代码
// 1. 先给 ms 里每个 mat 绑定好 Tensor 的内存地址(只是指路)
ms[i] = cv::Mat(height, width, CV_32F, cpu<float>(n, i));

// 2. 然后 split 把图像拆开放进这些地址里!
cv::split(image, &ms[0]);

现在是不是彻底懂了?

  1. 先准备好 3 个空的单通道 Mat(指向Tensor)
  2. split 把彩色图拆开,直接写入这 3 个 Mat
  3. 因为 Mat 指向 Tensor,所以数据直接进 Tensor!

超级精简总结

cv::split(输入多通道图, 输出单通道数组)

功能:把彩色图拆成 R、G、B 三个灰度图

你代码里的用途:拆通道 + 直接写入Tensor内存

相关推荐
agicall.com3 小时前
座机通话双方语音分离技术解决方案详解
人工智能·语音识别·信创电话助手·座机语音转文字·固话座机录音转文字
AI机器学习算法3 小时前
《动手学深度学习PyTorch版》笔记
人工智能·学习·机器学习
Goboy3 小时前
「我的第一次移动端 AI 办公」TRAE SOLO 三端联动, 通勤路上就把活干了,这设计,老罗看了都想当场退役
人工智能·ai编程·trae
qq_452396233 小时前
第二十篇:《UI自动化测试的未来:AI驱动的智能测试与低代码平台》
人工智能·低代码·ui
视觉&物联智能4 小时前
【杂谈】-人工智能风险文化对组织决策的深远影响
人工智能·安全·ai·agi
β添砖java4 小时前
深度学习(12)Kaggle房价竞赛
人工智能·深度学习
冬奇Lab4 小时前
RAG 系列(十):混合检索——让召回更全面
人工智能·llm
冬奇Lab4 小时前
一天一个开源项目(第95篇):Claude for Financial Services - Anthropic 官方金融行业 AI 代理套件
人工智能·开源·资讯
bbsh20994 小时前
AI辅助编程时代,企业级网站系统建设为什么还需要专业平台?
人工智能
05候补工程师4 小时前
[实战复盘] 拒绝 AI 屎山!我从设计模式中学到的“调教”AI 新范式
人工智能·python·设计模式·ai·ai编程