Opencv通道的分离、合并和混合
OpenCV中默认imread函数加载图像文件,加载进来的是三通道彩色图像,色彩空间是RGB色彩空间、通道顺序是BGR(蓝色、绿色、红色)、对于三通道的图像OpenCV中提供了两个API函数用以实现通道分离与合并。
1.通道分离
API: split(待分离的Mat型多通道矩阵(二维),填分离后的Mat型单通道数组(三维)或一个vector对象);
void split(InputArray m, OutputArrayOfArrays mv)
参数解释:
image 输入图片
mv 输出mat对象
std::vector<Mat> mv;
split(image, mv); //通道分离 split函数用于将一个多通道数组分离成几个单通道数组。
imshow("蓝色", mv[0]);
imshow("绿色", mv[1]);
imshow("红色", mv[2]);
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);
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);