OpenCV Mat图像颜色通道分离(split)合成(merge),各通道合图显示.
#include <cv.h>
#include <highgui.h>
#include <iostream>
#include <windows.h>
using namespace cv;
using namespace std;
intmain( int argc, char**argv )
{
FreeConsole(); //Hide theCMD window
if( argc != 2)
{
std::cout<<"请输入需要加载的文件!"<< std::endl;
return -1;
}
//读取图像
Matimage;
char * imageName = argv[1];
image= imread(imageName, CV_LOAD_IMAGE_COLOR);// Read thefile
if(! image.data ) //Check for invalid input
{
std::cout<< "文件加载失败,请检查!" <<std::endl ;
return -1;
}
//灰度图
MatgrayImage;
cvtColor(image,grayImage,CV_RGB2GRAY);//Coonvert the image from RGB to Grayscale format
//显示用
Matdisplay;
int w = image.cols;
int h = image.rows;
display.create(h*2,w*2,CV_8UC3);
//黑色
Matbk;
bk.create(h,w,CV_8UC1);
bk= Scalar(0);
//显示框
Matm(display,Rect(0,0,w,h));++====
Matm1(display,Rect(0,h,w,h));
Matm2(display,Rect(w,0,w,h));
Matm3(display,Rect(w,h,w,h));
Matm4(display,Rect(w/2,h/2,w,h));
//通道分离用
std::vector<cv::Mat>sbgr(image.channels());
//通道合成用
std::vector<cv::Mat>mbgr(image.channels());
//分离
split(image,sbgr); //split to sbgr[0],sbgr[1] ,sbgr[2]
//合成到显示-灰度
mbgr[0]= grayImage;
mbgr[1]= grayImage;
mbgr[2]= grayImage;
merge(mbgr,m);
//合成到显示-B
mbgr[0]= sbgr[0];
mbgr[1]= bk;
mbgr[2]= bk;
merge(mbgr,m1);
//合成到显示-G
mbgr[0]= bk;
mbgr[1]= sbgr[1];
mbgr[2]= bk;
merge(mbgr,m2);
//合成到显示-R
mbgr[0]= bk;
mbgr[1]= bk;
mbgr[2]= sbgr[2];
merge(mbgr,m3);
//复制到显示-原图
image.copyTo(m4);
//显示
namedWindow(imageName,CV_WINDOW_NORMAL);// Create a window fordisplay.
resizeWindow(imageName,w*2,h*2);
imshow(imageName, display); // Show our image inside it.
waitKey(0); //Wait for a keystroke in the window
return 0;
}