图像的线性混合操作
g(x)=(1-alpha) f0(x) +(alpha) f1(x)
注意:图像混合必须保证两张图像的规格完全一样
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
Mat src1,src2,dst1,dst2,dst3;
src1 = imread("D:/image/img1.jpg");
src2 = imread("D:/image/img2.jpg");
if (src1.empty()) {
cout <<" could not load image img1...\n "<< endl;
return - 1;
}
if (src2.empty()) {
cout << "could not load image img2...\n" << endl;
return -1;
}
double alpha = 0.5; //表示图像融合的权重
if (src1.rows == src1.rows && src1.cols == src2.cols) {
addWeighted(src1, alpha, src2,(1-alpha),0.0,dst1);
//参数说明:1.图片1 2.图片1的融合权重 3.图片2 4.图片2的融合权重 5.直接用0.0就好 6.融合后的目标图片
add(src1, src2, dst2); //图像的像素值直接相加对比有权重融合的效果
multiply(src1, src2, dst3,1.0 ); //图像的像素值直接相乘对比有权重混合的效果
namedWindow("src1", WINDOW_AUTOSIZE);
imshow("src1", src1);
namedWindow("src2", WINDOW_AUTOSIZE);
imshow("src2",src2);
namedWindow("dst1", WINDOW_AUTOSIZE);
imshow("dst1", dst1);
namedWindow("dst2", WINDOW_AUTOSIZE);
imshow("dst2", dst2);
namedWindow("dst3", WINDOW_AUTOSIZE);
imshow("dst3", dst3);
}
else {
printf("could not blend images,the size of images is not same...\n");
return -1;
}
waitKey(0);
return 0;
}