一般的彩色图是由多个灰度图进行叠加产生的:
使用API函数split和merge进行通道的分离和合并。
split(src, mv);——将src的各通道图像矩阵值赋予mv
merge(mv, dst);——将mv合并到dst。
src——输入图像
mv——定义的空白图像数组矩阵
dst——输出图像
1、 将图像分离成3通道并显示:
void QuickDemo::channels_Demo(Mat& image) {
std::vector<Mat> mv;//图像数组
split(image, mv);
imshow("蓝色", mv[0]);
imshow("绿色", mv[1]);
imshow("红色", mv[2]);
}
2、只显示单个通道,需要将除指定通道外的其它矩阵置0:
void QuickDemo::channels_Demo(Mat& image) {
std::vector<Mat> mv;//图像数组
split(image, mv);
Mat dst;
mv[1] = 0;
mv[2] = 0;
merge(mv, dst);
imshow("单色通道", dst);
}
结果:
3、通道顺序对调:
API:
void QuickDemo::channels_Demo(Mat& image) {
std::vector<Mat> mv;//图像数组
split(image, mv);
/*imshow("蓝色", mv[0]);
imshow("绿色", mv[1]);
imshow("红色", mv[2]);*/
Mat dst;
mv[1] = 0;
mv[2] = 0;
merge(mv, dst);
imshow("单色通道", dst);
int from_to[] = {0,2, 1, 1, 2,0};
mixChannels(&image,1, &dst,1, from_to,3);//根据from_to来交换,入开始的0,2意为将通道0交换到通道2。
imshow("通道混合", dst);
}
说明:根据from_to来交换,以两个元素为一组,开头一组的的0,2意为将通道0交换到通道2。
结果: