core核心模块--使用OpenCV对两幅图像求和(求混合(blending))

来源:互联网 发布:淘宝自动纸箱封箱机 编辑:程序博客网 时间:2024/05/16 04:17

1.目的
(1)线性混合(linear blending)是什么以及有什么优势
(2)如何使用addWeighted函数进行两幅图像求和

2.原理
线性混合操作是一种经典的二元操作:
线性混合操作

通过在范围 0->1 内改变a,以及改变gamma值,这个操可以用来对两幅图像或两段视频产生时间上的 画面叠化 (cross-dissolve)效果

3.代码实现

#include<iostream>using namespace std;#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>using namespace cv;int main(int argc, char** argv){    if(argc < 2){        cout << "more parameters are required!!!" << endl;        return(-1);    }    double alpha, beta, gamma;    Mat result;    alpha = 0.5;    beta = 1-alpha;    gamma = 0;    Mat image1 = imread(argv[1]);    Mat image2 = imread(argv[2]);    //判断是否成功读入图片数据    if(!image1.data || !image2.data){        cout << "error reading images!!!" << endl;        return(-1);    }    //判断读入的图片是否大小相同    cout << image1.size() << endl;    cout << image2.size() << endl;    //CV_Assert(image1.rows!=image2.rows && image1.rows!=image2.rows);    //使用addWeighted函数混合图片,PS:图片的大小要一致    addWeighted(image1, alpha, image2, beta, gamma, result);    imshow("blending images", result);    waitKey(0);    return(0);}

参考文献
1.http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/adding_images/adding_images.html#adding-images

阅读全文
0 0