OpenCV学习之路(八) 分离颜色通道、多通道图像混合

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

运行结果如下图所示:

 

 

 

猜你喜欢

转载自blog.csdn.net/dashujua/article/details/82285500