图像混合
图像混合,产生的效果跨越了时间空间.
原理如下面公式,两张原始图像按权重相加,最终生成新图像.
函数介绍:addWeighted()
函数原型:void addWeighted(InputArray src1, double alpha, InputArray src2,
double beta, double gamma, OutputArray dst, int dtype = -1);
函数功能:计算两个数组的加权和。
函数声明:
InputArray src1::加权的第一个数组
double alpha:第一个数组的权重
InputArray src2:加权的第二个数组
double beta:第二个数组的权重
double gamma:计算完权重和,再加上这个值,才是最后的结果
OutputArray dst:输出数组,与输入数组具有相同大小和通道数
int dtype = -1: 输出阵列的可选深度;当两个输入数组具有相同的深度时,使用dtype
可以设置为-1,这将等效于src1.depth()
线性混合模式:
1 #include <opencv2/opencv.hpp> 2 #include <iostream> 3 4 using namespace std; 5 using namespace cv; 6 7 int main(int argc, char** argv) { 8 9 /*载入原图像*/ 10 Mat src1, src2, dst; 11 src1 = imread("D:/shenjianxin.png"); 12 src2 = imread("D:/xiaobai.png"); 13 if (!src1.data ) { 14 cout << "could not load image1" << endl; 15 return false; 16 } 17 if (!src2.data) { 18 cout << "could not load image2" << endl; 19 return false; 20 } 21 imshow("shenjianxin", src1); 22 imshow("xiaobai", src2); 23 24 /*图像融合*/ 25 double alpha = 0.45; 26 if (src1.rows == src2.rows && src1.cols == src2.cols && src1.type() == src2.type()) { 27 addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst); 28 } 29 else { 30 cout << "could not blend photo" << endl; 31 return false; 32 } 33 34 /*显示结果*/ 35 namedWindow("blend demo", CV_WINDOW_AUTOSIZE); 36 imshow("blend demo", dst); 37 38 waitKey(0); 39 return 0; 40 }
原始图
效果图