图像通道操作
函数1:split(const Mat& src,Mat *mvbegin)
第一个参数:为要进行分离的图像矩阵,是一幅多通道的图像;
第二个参数:可以是Mat数组的首地址,或者是容器vector<Mat>对象;
作用:将图像拆分成单个通道
函数2:void merge(const Mat* mv,size_t count,outputarray dst);
void merge(const vector<Mat>& mv,outputArray dst);
作用:可以将多个单通道合成一幅多通道的图像。
函数3 :mixchaneels(const Mat* src,int nsrc,Mat* dst,int ndst,const int* fromTo,size_t npairs);
其中参数
参数1:输入图像
参数2:输入图像的个数
参数3:输出图像
参数4:输出图像的个数
参数5:输入通道指向那个输出通道(配对)int from_to[] = { 0,2,1,1,2,0 }; //输入通道顺序和输出通道顺序(配对)
参数6:输出通道的个数
为什么图像都是灰色的?不是红绿蓝
因为分离后为单通道,相当于分离通道的同时把其他两个通道填充相同的数值。
比如绿色通道,分离出红色通道的同时,绿色和蓝色被填充为和红色相同的数值,
这样只有黑白灰。
void QuickDemo::channels_demo(Mat &image) {
vector<Mat>mv;
split(image, mv);//通道分离
imshow("蓝色", mv[0]);
imshow("绿色", mv[1]);
imshow("红色", mv[2]);
Mat dst;
mv[0] = 0;
mv[1] = 0;
merge(mv,dst);//通道合并
int from_to[] = {0,2,1,1,2,0};
mixChannels(&image,1,&dst,1,from_to,3);//图像融合
imshow("合并", dst);
}