opencv分RGB合并图像

228 阅读1分钟



// opencv2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <vector>
#include <stdio.h>

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
//注意被合并图像一定要比源图像要小一半
Mat JPGsrc;
Mat girl;
vector<Mat>matList;

Mat  image_result;
girl = imread("test-3.jpg", 0);
JPGsrc = imread("test.jpg");
if (!girl.data) { printf("读取错误~!\n"); return false; }
if (!JPGsrc.data) { printf("读取错误~!\n"); return false; }
split(JPGsrc, matList);//分离色彩通道 这里其实就是将rgb分开
image_result = matList.at(0);//这里只取了第一个分也就是蓝色
addWeighted(image_result(Rect(100, 100, girl.cols, girl.rows)), 1.0,             girl, 0.5, 0, image_result(Rect(100, 100, girl.cols, girl.rows)));
//这里将蓝色与图片合并
merge(matList, JPGsrc);
//将三个单通道重新合并成一个三通道
namedWindow("显示");
imshow("显示", JPGsrc);
waitKey(30);
///
Mat  imageGreenChannel;
girl = imread("test-3.jpg", 0);
JPGsrc = imread("test.jpg");
if (!girl.data) { printf("读取错误~!\n"); return false; }
if (!JPGsrc.data) { printf("读取错误~!\n"); return false; }
split(JPGsrc, matList);//分离色彩通道
//取绿色图像
imageGreenChannel = matList.at(1);
//合并
addWeighted(imageGreenChannel(Rect(100, 100, girl.cols, girl.rows)), 1.0,
girl, 0.5, 0., imageGreenChannel(Rect(500, 250, girl.cols, girl.rows)));
//将三个单通道重新合并成一个三通道
merge(matList, JPGsrc);
namedWindow("显示2");
imshow("显示2", JPGsrc);
waitKey(30);

Mat  imageRedChannel;
girl = imread("test-3.jpg", 0);
JPGsrc = imread("test.jpg");
if (!girl.data) { printf("读取错误~!\n"); return false; }
if (!JPGsrc.data) { printf("读取错误~!\n"); return false; }
split(JPGsrc, matList);//分离色彩通道
imageRedChannel = matList.at(2);//取红色
//合并
addWeighted(imageRedChannel(Rect(100, 100, girl.cols, girl.rows)), 1.0,
girl, 0.5, 0., imageRedChannel(Rect(100, 100, girl.cols, girl.rows)));
//合并通道
merge(matList, JPGsrc);
namedWindow("显示3");
imshow("显示3", JPGsrc);
waitKey(30);

 return  0;

}

\

\

\

\