OpenCV Mat颜色通道分离,各通道合图显示

更新时间:2024-01-10 19:19:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

#include #include #include #include

using namespace cv; using namespace std;

int main( int argc, char** argv ) {

FreeConsole(); if( argc != 2) {

std::cout <<\请输入需要加载的文件!\ << std::endl;

//Hide the CMD window

return -1; }

//读取图像 Mat image;

char * imageName = argv[1];

image = imread(imageName, CV_LOAD_IMAGE_COLOR);// Read the file if(! image.data ) // Check for invalid input {

}

std::cout << \文件加载失败,请检查!\ << std::endl ; return -1;

//灰度图 Mat grayImage;

cvtColor(image,grayImage,CV_RGB2GRAY);//Coonvert the image from RGB to Grayscale format //显示用 Mat display; int w = image.cols; int h = image.rows;

display.create (h*2,w*2,CV_8UC3); //黑色 Mat bk;

bk.create(h,w,CV_8UC1); bk = Scalar(0); //显示框

Mat m(display,Rect(0,0,w,h)); Mat m1(display,Rect(0,h,w,h)); Mat m2(display,Rect(w,0,w,h)); Mat m3(display,Rect(w,h,w,h)); Mat m4(display,Rect(w/2,h/2,w,h)); //通道分离用

std::vector sbgr(image.channels()); //通道合成用

std::vector 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 for display. resizeWindow(imageName,w*2,h*2);

imshow( imageName, display); // Show our image inside it. waitKey(0);

return 0;

}

// Wait for a keystroke in the window

本文来源:https://www.bwwdw.com/article/w60o.html

Top