多通道分离与合并
多通道分离与合并
分离
- 函数
split()
用于将多通道的图像分离成若干单通道的图像
split(const Mat & src, Mat * mvbegin) // 原型一 split(IuputArray m, OutputArrayOfArrays mv) // 原型二
- src:待分离的多通道图像
- mvbegin:分离后的单通道图像,为数组形式,数组大小需要与图像的通道数相同
- m:待分离的多通道图像
- mv:分离后的单通道图像,类型为 vector<Mat>
合并
- 函数
merge()
主要用于将多个图像合并成一个多通道图像 - 合并函数的输出结果是一个多通道图像,其通道数目是所有输入图像通道数目的总和
- 用于合并的图像并非都是单通道的,也可以是多个通道数目不相同的图像合并成一个通道更多的图像
merge(const Mat * mv, size_t count, OutputArray dst) // 原型一 merge(IuputArrayOfArrays mv, OutputArray dst) // 原型二
- mv:需要合并的图像数组,其中每个图像必须拥有相同的尺寸和数据类型
- count:输入的图像数组的长度,其数值必须大于0
- dst:合并后输出的图像,与mv[0]具有相同的尺寸和数据类型,通道数等于所有输入图像的通道数总和
- mv:需要合并的图像矢量(vector),其中每个图像必须拥有相同的尺寸和数据类型
示例
#include <opencv2/opencv.hpp> #include <vector> using namespace cv; int main() { Mat_<Vec3b> bgr = imread("/home/kslas/OpenCV/test.jpg", -1); Mat_<Vec3b> hsv; cvtColor(bgr, hsv, COLOR_BGR2HSV); // 输入数组参数的多通道分离与合并 Mat_<uchar> imgs0; Mat_<uchar> imgs1; Mat_<uchar> imgs2; Mat_<uchar> imgs[3]; split(bgr, imgs); imshow("RGB-B", imgs[0]); imshow("RGB-G", imgs[1]); imshow("RGB-R", imgs[2]); Mat_<uchar> zero = Mat::zeros(imgs[2].size(), imgs[2].type()); imgs[2] = zero; Mat_<Vec3b> result1; merge(imgs, 3, result1); imshow("result1", result1); // 输入vector参数的多通道分离与合并 Mat_<uchar> imgv0; Mat_<uchar> imgv1; Mat_<uchar> imgv2; std::vector<Mat_<uchar>> imgv; split(hsv, imgv); imgv0 = imgv.at(0); imgv1 = imgv.at(1); imgv2 = imgv.at(2); imshow("HSV-H", imgv0); imshow("HSV-S", imgv1); imshow("HSV-V", imgv2); imgv0 = 180; Mat_<Vec3b> result2; merge(imgv, result2); imshow("result2", result2); waitKey(0); destroyAllWindows(); return 0; }
运行结果:
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!