针对图像融合, OpenCV也提供了相关的接口:addWeighted。
原型:
void addWeighted(InputArray src1,
double alpha,
InputArray src2,
double beta,
double gamma,
OutputArray dst,
int dtype = -1);
参数说明:
src1: 原图1
alpha: 混合中原图1所占的比重
src2: 原图2
beta:混合中原图2所占的比重
gamma: 增益
dst:生成的目标图
dtype:生成图像的色深,默认与原图1一致
画面混合的简单算法表示:
dst = src1 * alpha(透明度 [0 ~ 1] 浮点数) + src2 * (1 - alpha) + gamma(增益);
绝知此事要躬行
int main(int argc, char *argv[])
{
Mat img1 = imread("2.jpg");
Mat img2 = imread("3.jpg");
resize(img2, img2, img1.size());
Mat dst;
float a = 0.8;
addWeighted(img1, a, img2, 1 - a, 80, dst);
namedWindow("blending");
imshow("blending", dst);
waitKey(0);
return 0;
}
代码说明
1. 由于混合的需求,我们使用了resize将图像2的大小调整到与1一致; 2.使用addWeighted将两幅图像进行融合,可自行调整aplha和beta的值来观察实际效果。
请仔细看结果