C++Opencv通道的分离、合并和混合

Opencv通道的分离、合并和混合

OpenCV中默认imread函数加载图像文件,加载进来的是三通道彩色图像,色彩空间是RGB色彩空间、通道顺序是BGR(蓝色、绿色、红色)、对于三通道的图像OpenCV中提供了两个API函数用以实现通道分离与合并。

1.通道分离

API: split(待分离的Mat型多通道矩阵(二维),填分离后的Mat型单通道数组(三维)或一个vector对象);

void split(InputArray m, OutputArrayOfArrays mv)

参数解释:
image 输入图片
mv 输出mat对象

	std::vector mv;
	split(image, mv);   //通道分离  split函数用于将一个多通道数组分离成几个单通道数组。
	imshow("蓝色", mv[0]);
	imshow("绿色", mv[0]);
	imshow("红色", mv[0]);

C++Opencv通道的分离、合并和混合_第1张图片

2.通道合并

API: split(待分离的Mat型多通道矩阵(二维),填分离后的Mat型单通道数组(三维)或一个vector对象);

void merge(InputArrayOfArrays mv, OutputArray dst)

参数解释:
mv 输入图片
dst 输出mat对象

	Mat dst;
	mv[0] = 0;  //将蓝色通道变为0
	merge(mv, dst);    //通道合并
	imshow("红色合并", dst);

C++Opencv通道的分离、合并和混合_第2张图片

3.通道混合

API: mixChannels(输入矩阵(可以1个,可以多个),矩阵个数,输出矩阵,矩阵个数,矩阵对应规则,fromTo的数组元素个数除以2),输入的矩阵(或矩阵数组)的某些通道拆分复制给对应的输出矩阵(或矩阵数组)的某些通道中,其中的对应关系就由fromTo参数制定

mixChannels(&image, 1, &dst, 1, from_to,3);

参数解释:
image 输入图片
1 输入对象的数量
dst 输出mat对象
1 输出对象的数量
fromTo 通道的对应关系
3 通道的数量

	int from_to[] = { 0,2,1,1,2,0 };  // 0通道换到2通道  1通道换到1通道 2通道换到0通道
	mixChannels(&image, 1, &dst, 1, from_to, 3);
	imshow("通道混合",dst);

C++Opencv通道的分离、合并和混合_第3张图片

你可能感兴趣的:(Opencv(C++),opencv,c++,计算机视觉)