#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
bool ROI_AddImage()
{
// 【1】读入图像
Mat srcImage1 = imread("dota_pa.jpg");
Mat logoImage = imread("dota_logo.jpg");
// 【2】定义一个Mat类型并给其设定ROI区域
Mat imageROI = srcImage1(Rect(100, 100, logoImage.cols, logoImage.rows));
//(100,100)为图像左上角坐标
// 【3】加载掩模(必须是灰度图)
Mat mask = imread("dota_logo.jpg", 0);
//【4】将掩膜拷贝到ROI
logoImage.copyTo(imageROI, mask);
// 【5】显示结果
namedWindow("<1>利用ROI实现图像叠加示例窗口");
imshow("<1>利用ROI实现图像叠加示例窗口", srcImage1);
return true;
}
bool LinearBlending()
{
//【0】定义一些局部变量
double alphaValue = 0.5;
double betaValue = 0.5;
Mat srcImage2, srcImage3, dstImage;
// 【1】读取图像 ( 两幅图片需为同样的类型和尺寸 )
srcImage2 = imread("mogu.jpg");
srcImage3 = imread("rain.jpg");
// 【2】进行图像混合加权操作
addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage);
// 【3】显示原图窗口
//imshow("<2>线性混合示例窗口【原图1】", srcImage2);
//imshow("<2>线性混合示例窗口【原图2】", srcImage3);
imshow("<3>线性混合示例窗口【效果图】", dstImage);
return true;
}
bool ROI_LinearBlending()
{
//【1】读取图像
Mat srcImage4 = imread("dota_pa.jpg", 1);
Mat logoImage = imread("dota_logo.jpg");
if (!srcImage4.data) { printf("读取srcImage4错误~! \n"); return false; }
if (!logoImage.data) { printf("读取logoImage错误~! \n"); return false; }
//【2】定义一个Mat类型并给其设定ROI区域
Mat imageROI;
//方法一
imageROI = srcImage4(Rect(500, 200, logoImage.cols, logoImage.rows));
//方法二
//imageROI= srcImage4(Range(500,500+logoImage.rows),Range(200,200+logoImage.cols));
//【3】将logo加到原图上
addWeighted(imageROI, 0.5, logoImage, 0.7, 0.0, imageROI);
//【4】显示结果
imshow("<4>区域线性图像混合示例窗口", srcImage4);
return true;
}
int main()
{
ROI_AddImage();
LinearBlending();
ROI_LinearBlending();
waitKey(0);
return (0);
}
转载自 http://blog.csdn.net/poem_qianmo/article/details/20911629