OpenCV Mat图像颜色通道分离(split)合成(merge),各通道合图显示

来源:互联网 发布:慕情捏脸数据 编辑:程序博客网 时间:2024/05/17 22:49

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;

}

原创粉丝点击