OpenCV基础(三)---图像混合

图像混合

图像混合,产生的效果跨越了时间空间.

原理如下面公式,两张原始图像按权重相加,最终生成新图像.

函数介绍: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 }

原始图

效果图

    

猜你喜欢

转载自www.cnblogs.com/zmm1996/p/10661822.html
今日推荐