#include <opencv2/opencv.hpp>
#include <Windows.h>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
/*
利用addweight 实现图像混合
*/
bool LinearBlending()
{
double alphaValue = 0.5;
double betaValue;
Mat srcImage2, srcImage3, dstImage;
//两幅图尺寸和类型相同++++++++++
srcImage2 = imread("C:/Users/hasee-pc/Desktop/dog.jpg");
srcImage3 = imread("C:/Users/hasee-pc/Desktop/women.jpg");
if (!srcImage2.data)
{
printf("error at srcImage2\n");
return -1;
}
if (!srcImage3.data)
{
printf("error at srcImage3\n");
return -1;
}
betaValue = (1.0 - alphaValue);
addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage);
namedWindow("<2>线性混合实列窗口【原图】", 1);
imshow("<2>线性混合实列窗口【原图】", srcImage2);
namedWindow("<2>线性混合实列窗口【效果图】", 1);
imshow("<2>线性混合实列窗口【效果图】", dstImage);
//imwrite("C:/Users/hasee-pc/Desktop/addimage.jpg", dstImage);
return true;
}
//-------------[ROI_LinearBlending]-----------------------
//函数名:线性混合实现函数,指定区域线性混合,利用cv::addWeighted()函数结合定义
//感兴趣区域ROI,实现自定义区域的线性混合
//--------------------------------------------------------
bool ROI_LinearBlending()
{
Mat srcImage4 = imread("C:/Users/hasee-pc/Desktop/dog.jpg", 1);
Mat logoImage = imread("C:/Users/hasee-pc/Desktop/girl.jpg");
if (!srcImage4.data)
{
printf("读取srcImage4错误!\n");
return false;
}
if (!logoImage.data)
{
printf("读取logoImage错误!\n");
return false;
}
Mat ImageROI;
ImageROI = srcImage4(Rect(200, 250, logoImage.cols, logoImage.rows));
//ImageROI = srcImage4(Range(250, 250 + logoImage.rows), Range(200, 200 + logoImage.cols));
addWeighted(ImageROI, 0.5, logoImage, 0.3, 0.0, ImageROI);
namedWindow("<3>区域线性混合实列窗口");
imshow("<3>区域线性混合实列窗口", srcImage4);
return true;
}
//-------------------【ROI_AddImage()】----------------
//函数名:ROI_AddImage()
//利用感兴趣区域ROI实现图像叠加
bool ROI_AddImage()
{
Mat srcImage1 = imread("C:/Users/hasee-pc/Desktop/dog.jpg");
Mat logoImage = imread("C:/Users/hasee-pc/Desktop/girl.jpg");
if (!srcImage1.data)
{
printf("读取srcImage1错误!\n");
return false;
}
if (!logoImage.data)
{
printf("读取logoImage错误!\n");
return false;
}
Mat ImageROI = srcImage1(Rect(200, 250, logoImage.cols, logoImage.rows));
//加载掩膜(必须是灰度图)
Mat mask = imread("C:/Users/hasee-pc/Desktop/girl.jpg", 0);
//掩膜复制到ROI
logoImage.copyTo(ImageROI, mask);
namedWindow("<1>利用ROI实现图像叠加实列窗口");
imshow("<1>利用ROI实现图像叠加实列窗口", srcImage1);
return true;
}
int main(int argc,char *argv[],char **env)
{
system("color 5E");
if (ROI_AddImage() && LinearBlending() && ROI_LinearBlending())
{
printf("Successful create image\n");
}
waitKey(0);
return 0;
}