(图文件混合)
所需新函数:
addWight(第一个图文件,第一个图权重,第二个图,第二个权重,相加后再加的值,结果图,景深)
1.第五个参数是相加之后再加的像素值,如果再加上此参数之后超过255则会变成白色(详情参照运算式。
2.景深可有可无
3. 运算式:last = alpha *image1 + beta*image2 +gamma(第五个参数)
相同分辨率图片混合:
#include "opencv2/imgcodecs/legacy/constants_c.h"
#include <opencv2/highgui/highgui_c.h>
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc,char** argv)
{
//文件权重
double alpha=0.0, beta, input;
//图像
Mat image1,image2,last;
//用户输入权重
cout << "请输入第一张图权重(0到1):";
cin >> input;
//确保0到1
if (alpha >= 0 && alpha <= 1)
{
alpha = input;
}
//读取两张图片(大小类型相同)
image1 = imread("C:\\god_of_shi.jpg");
image2 = imread("C:\\star.jpg");
//确保读取正确
if (!image1.data)
{
cout << "读取图像1错误" << endl;
return -1;
}
if (!image2.data)
{
cout << "读取图像2错误" << endl;
return -1;
}
//显示
namedWindow("混合", 1);
//图像二的权重计算
beta = (1.0 - alpha);
//两图相加
addWeighted(image1, alpha, image2, beta, 0.0, last,0.5);
imshow("混合", last);
waitKey(0);
return 0;
}
不同分辨率图片混合:
#include “opencv2/imgcodecs/legacy/constants_c.h”
#include <opencv2/highgui/highgui_c.h>
#include <opencv2/opencv.hpp>
#include
using namespace std;
using namespace cv;
int main(int argc,char** argv)
{
//图像
Mat image1,image2,last,image3;
//读取两张图片(大小类型相同)
image1 = imread("C:\\god_of_shi.jpg");
image2 = imread("C:\\star.jpg");
//确保读取正确
if (!image1.data)
{
cout << "读取图像1错误" << endl;
return -1;
}
if (!image2.data)
{
cout << "读取图像2错误" << endl;
return -1;
}
//显示
namedWindow("混合前", 1);
//定义第二张图再第一张图中的位置
Mat imageROI = image1(Rect(10, 10, image2.cols,image2.rows));
imshow("混合前", image2);
//两图相加
addWeighted(image1, 0.5, image2, 0.5, 0., imageROI);
namedWindow("混合后");
imshow("混合后",imageROI);
waitKey(0);
return 0;
}
问题:
abord has been called:
第二张图片混合后超过原大小,矩阵溢出。