19,468
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <iostream>
#include <vector>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <cv.h>
#include <highgui.h>
using namespace std;
using namespace cv;
#pragma comment(lib,"opencv_highgui244d.lib")
#pragma comment(lib,"opencv_core244d.lib")
#pragma comment(lib,"opencv_imgproc244d.lib")
void split_image(const char* image_name)
{
Mat image_src = imread(image_name);
Mat image_dst;
vector<Mat> bgr;
//颜色通道分离
//输入图像
//分离后各通道
split(image_src,bgr);
//颜色通道合成
//输入各通道
//输入图像
merge(bgr,image_dst);
//用彩色图像形象的表示一下,除了原通道保留,其余两通道置0
Mat tmp(image_src.size(),CV_8U,Scalar(0));
vector<Mat> b,g,r; //用来表示的彩色图像
for(int i=0;i<3;i++)
{
if(i==0)
b.push_back(bgr[0]);
else
b.push_back(tmp);
if(i==1)
g.push_back(bgr[1]);
else
g.push_back(tmp);
if(i==2)
r.push_back(bgr[2]);
else
r.push_back(tmp);
}
Mat image_b,image_g,image_r;
merge(b,image_b);
merge(g,image_g);
merge(r,image_r);
namedWindow( "b", CV_WINDOW_AUTOSIZE );
namedWindow( "g", CV_WINDOW_AUTOSIZE );
namedWindow( "r", CV_WINDOW_AUTOSIZE );
namedWindow( "dst", CV_WINDOW_AUTOSIZE );
imshow("b",image_b);
waitKey(1);
imshow("g",image_g);
waitKey(1);
imshow("r",image_r);
waitKey(1);
imshow("dst",image_dst);
moveWindow("dst", 1,1);
moveWindow("b",800,1);
moveWindow("g",1,500);
moveWindow("r",900,500);
waitKey(1);
waitKey(0);
//不加上面两个的话,窗口显示出来有问题,不能移动,鼠标处于忙碌状态。而且还要跟imshow配对
}
int _tmain(int argc, _TCHAR* argv[])
{
char* image_name = "swan.jpg";
split_image(image_name);
//split_image_gray(image_name);
//historgram_channel(image_name);
getchar();
return 0;
}