多通道分离与合并
多通道分离与合并
分离
- 函数
split()用于将多通道的图像分离成若干单通道的图像
原型一:
void cv::split(const Mat & src, Mat * mvbegin)
// src:待分离的多通道图像
// mvbegin:分离后的单通道图像,为数组形式,数组大小需要与图像的通道数相同
原型二:
void cv::split(IuputArray m, OutputArrayOfArrays mv)
// m:待分离的多通道图像
// mv:分离后的单通道图像,类型为vector
合并
- 函数
merge()主要用于将多个图像合并成一个多通道图像 - 合并函数的输出结果是一个多通道图像,其通道数目是所有输入图像通道数目的总和
- 用于合并的图像并非都是单通道的,也可以是多个通道数目不相同的图像合并成一个通道更多的图像
原型一:
void cv::merge(const Mat * mv, size_t count, OutputArray dst)
// mv:需要合并的图像数组,其中每个图像必须拥有相同的尺寸和数据类型
// count:输入的图像数组的长度,其数值必须大于0
// dst:合并后输出的图像,与mv[0]具有相同的尺寸和数据类型,通道数等于所有输入图像的通道数总和
原型二:
void cv::merge(IuputArrayOfArrays mv, OutputArray dst)
// mv:需要合并的图像矢量(vector),其中每个图像必须拥有相同的尺寸和数据类型
例子
#include
#include
using namespace cv;
int main()
{
Mat_ bgr = imread("/home/kslas/OpenCV/test.jpg", -1);
Mat_ hsv;
cvtColor(bgr, hsv, COLOR_BGR2HSV);
// 输入数组参数的多通道分离与合并
Mat_ imgs0;
Mat_ imgs1;
Mat_ imgs2;
Mat_ imgs[3];
split(bgr, imgs);
imshow("RGB-B", imgs[0]);
imshow("RGB-G", imgs[1]);
imshow("RGB-R", imgs[2]);
Mat_ zero = Mat::zeros(imgs[2].size(), imgs[2].type());
imgs[2] = zero;
Mat_ result1;
merge(imgs, 3, result1);
imshow("result1", result1);
// 输入vector参数的多通道分离与合并
Mat_ imgv0;
Mat_ imgv1;
Mat_ imgv2;
std::vector> 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_ result2;
merge(imgv, result2);
imshow("result2", result2);
waitKey(0);
destroyAllWindows();
return 0;
}
运行结果: