//---------------------------------【头文件、命名空间包含部分】-------------------------------
// 描述:包含程序所使用的头文件和命名空间
//------------------------------------------------------------------------------------------------
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
bool main()
{
//【0】定义相关变量
Mat srcImage;
Mat logoImage;
vector<Mat>channels;
Mat imageBlueChannel;
//【蓝色通道部分】
//描述:多通道混合-蓝色分量部分
//【1】读入图片
srcImage = imread("dota_jugg.jpg");
logoImage = imread("dota_logo.jpg",0);
if (!srcImage.data) { printf("读取srcImage错误!\n"); return false; }
if(!logoImage.data){ printf("读取logoImage错误!\n"); return false; }
//【2】将一个三通道的多通道图像转换为3个单通道图像
split(srcImage, channels);
//【3】将原图的蓝色通道引用返回给imageBlueChannel,注意是引用,相当于两者等价,修改其中一个另一个跟着变
imageBlueChannel = channels.at(0);
//【4】将原图的蓝色通道的(500,250)坐标处右下方的一块区域和logo图进行加权操作,将得到的混合结果存到imageBlueChannel中
addWeighted(imageBlueChannel(Rect(500, 250, logoImage.cols, logoImage.rows)), 1.0, logoImage, 0.5, 0., imageBlueChannel(Rect(500, 250, logoImage.cols, logoImage.rows)));
//【5】将三个单通道重新合并成一个三通道
merge(channels, srcImage);
//【6】显示效果图
namedWindow("<1>游戏原画+logo蓝色通道");
imshow("<1>游戏原画+logo蓝色通道", srcImage);
waitKey(0);
return true;
}