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

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;

}

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值