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内存

相关推荐
打工仔折腾 AI3 分钟前
从零开始大模型微调:基于 PyTorch 与 ChatGLM 的 LoRA 实践指南
人工智能·pytorch·后端·python·深度学习·性能优化·ai agent 实战
百度Geek说11 分钟前
我们放弃了"全自动生成代码" —— 网盘 Coding Agent 落地与迭代实录
人工智能
回眸&啤酒鸭14 分钟前
【回眸】Inbox Zero 高效邮件管理实战效果展示
人工智能
江厌0118 分钟前
高校 AI 实训室怎么建?电力、算力、验收三本账与配电计算脚本
人工智能·配电·ai实训室·gpu服务器
Leo.yuan37 分钟前
企业级数据治理平台选型观察:FineDataLink 5.0 在多源异构环境中的应用价值
大数据·人工智能
云上工程笔记41 分钟前
2026年7B到67B模型训练与推理GPU配置评测:LoRA、量化与全量微调对比
人工智能·算法·机器学习
HRaitest1 小时前
拆解AI招聘系统技术架构:从ATS插件到L3级全自主寻访智能体的选型指南
大数据·人工智能·架构·求职招聘
盈米AI开放平台1 小时前
DeepSeek怎么辅助投资理财?MCP接入与能力边界说明
人工智能·金融·投资理财·deepseek·mcp
高洁011 小时前
具身智能感知系统底层原理
人工智能·python·深度学习·机器学习·transformer
趣味科技v1 小时前
重约1公斤、最厚12.7毫米,价格却回到2015年?
人工智能·笔记本电脑