版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dashujua/article/details/82285500
通道分离
1. split() 函数。用于将一个多通道数组分离成几个单通道数组。原型如下:
void split(const Mat& src, Mat* mvbegin);
void split(InputArray m, OutputArrayOfArrays mv);
(1)第一个参数,InputArray 类型或 Mat& 类型的 src,为我们需要进行通道分离的多通道数组(图像)。
(2)第二个参数,OutputArrayOfArrays 类型的 mv,为输出数组或输出的 vector 容器。
简单示例:
vector<Mat> channels;
Mat imageBlueChannel, imageGreenChannel, imageRedChannel;
Mat srcImage = imread("cat.jpg"); //三通道彩色图像
split(srcImage, channels); //分离三通道彩色图像
imageBlueChannel = channels.at(0);
imageGreenChannel = channels.at(1);
imageRedChannel = channels.at(2);
2.merge()函数。split() 函数的逆操作,将多个单通道图像合成多通道图像。
void merge(const Mat* mv, size_tcount, OutputArray dst);
void merge(InputArrayOfArrays mv, OutputArray dst);
(1)第一个参数,为需要合并的输入矩阵或 vector 容器。要求具有一样的尺寸和深度。
(2)第二个参数,当 mv 为一个空白的 C 数组时,代表输入矩阵的个数(大于 1 )。
(3)第三个参数,为合并后的输出矩阵,通道数为各输入矩阵或 vector 通道的总和。
综合示例如下:
#include<opencv2/opencv.hpp>
#include<ostream>
using namespace std;
using namespace cv;
bool multiChannelsBlending();
int main()
{
//设置控制台窗口颜色
system("color 9F");
if (multiChannelsBlending())
{
cout << "运行成功!\n" << endl;
waitKey(0);
return 0;
}
waitKey(0);
return 1;
}
bool multiChannelsBlending()
{
Mat srcImage, dstImage;
Mat blueChannelImage, greenChannelImage, redChannelImage;
vector<Mat> channels;
srcImage = imread("WindowsLogo.jpg");
imshow("原图", srcImage);
split(srcImage, channels);
blueChannelImage = channels.at(0);
greenChannelImage = channels.at(1);
redChannelImage = channels.at(2);
imshow("蓝色单通道图像", blueChannelImage);
imshow("绿色单通道图像", greenChannelImage);
imshow("红色单通道图像", redChannelImage);
merge(channels, dstImage);
imshow("通道合并后的图像", dstImage);
return true;
}
运行结果如下图所示: