void QUickdemo::channels_demo(Mat& image)
{
std::vector<Mat>mv;--vector是一种容器类型可以存储多个Mat类型的图片
split(image, mv);--split将一个多通道的图像拆分成多个单通道的图像并将其存储在MV里面
//结果三个图片都为灰度图
namedWindow("蓝色", WINDOW_FREERATIO);
imshow("蓝色", mv[0]);
namedWindow("绿色", WINDOW_FREERATIO);
imshow("绿色", mv[1]);
namedWindow("红色", WINDOW_FREERATIO);
imshow("红色", mv[2]);
Mat dst;
//将BGR中的G和R都设置为0
//蓝色
/*mv[1] = 0;
mv[2] = 0; */
//绿色
/*mv[0] = 0;
mv[2] = 0; */
//红色
mv[0] = 0;
mv[1] = 0;
merge(mv, dst);--merge用于将多个单通道图像合并成为一个多通道图像
namedWindow("颜色", WINDOW_FREERATIO);
imshow("颜色", dst);
通道混合
int from_to[] = { 0,2,1,1,2,0 };-- int from_to[] = { 0,2,1,1,2,0 };定义了一个数组,表示通道的映射关系。这里可以理解为将源图像(image)的通道按照这个映射关系复制到目标图像(dst)中。具体来说,第一个数字表示源图像的通道索引,第二个数字表示目标图像的通道索引。所以这里表示将源图像的通道 0 复制到目标图像的通道 2,源图像的通道 1 复制到目标图像的通道 1,源图像的通道 2 复制到目标图像的通道 0。
mixChannels(&image, 1, &dst, 1, from_to, 3);--mixChannels(&image, 1, &dst, 1, from_to, 3);函数调用中,第一个参数&image是源图像的指针,第二个参数1表示源图像的数量,第三个参数&dst是目标图像的指针,第四个参数1表示目标图像的数量,第五个参数from_to是通道映射关系数组,第六个参数3表示每个图像中的通道数。
namedWindow("通道混合", WINDOW_FREERATIO);
imshow("通道混合", dst);//第一个参数可以多个图像混合
}