#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
void addimg(Mat& img, Mat img1, vector<Mat>channels, Mat imgc, String tit);
int main()
{
Mat img = imread("F:/3.jpg");
Mat img1 = imread("F:/5.jpg",IMREAD_GRAYSCALE);
if (img.empty() || img1.empty())
{
cout << "加载图像失败! " << endl << endl;
return -1;
}
else
cout << "加载图像成功。 " << endl << endl;
vector<Mat>channels;
split(img, channels);
Mat imgBC;
imgBC = channels.at(2);
String imgb = "蓝色通道标题";
addimg(img, img1, channels, imgBC, imgb);
waitKey(0);
return 0;
}
void addimg(Mat& img, Mat img1, vector<Mat>channels, Mat imgc, String tit)
{
addWeighted(imgc(Rect(50, 50, img1.cols, img1.rows)), 1.0, img1, 0.6, 0.0,
imgc(Rect(50, 50, img1.cols, img1.rows)));
merge(channels, img);
imshow(tit, img);
}
//1.split()函数
//颜色通道分离函数,其定义如下所示:
//CV_EXPORTS void split(const Mat& src, Mat* mvbegin);
//CV_EXPORTS void split(const Mat& m, vector<Mat>& mv);
//
//其有两种定义形式。
//.第一个参数是输入分离通道的图像
//.第二个参数是一个Mat类型的vector容器,用来存放分离后的通道
//2.merge()函数
//
//CV_EXPORTS void merge(const Mat* mv, size_t count, OutputArray dst);
//CV_EXPORTS void merge(const vector<Mat>& mv, OutputArray dst);
//其定义也有两个定义形式,参数含义与split()函数基本相同。
//其OutputArray dst可以是一个Mat类型的数据。