美文网首页OpenCvOpenCVopencv
使用Opencv混合两个图像

使用Opencv混合两个图像

作者: 寻找时光机 | 来源:发表于2017-09-26 23:22 被阅读51次

目标

在本教程中,您将学习:

  • 什么是线性混合,为什么它很有用
  • 如何使用addWeighted()混合两个图像

理论

下面的解释属于Richard Szeliski的“ 《计算机视觉:算法与应用》 ”一书。

从以前的教程中,我们已经知道了一些像素运算符。一个常见的二元(双输入)算子线性混合运算符

线性混合运算符

通过改变α从0→1,这个操作员可以用来执行两个图像或视频之间的时间交叉溶解,如幻灯片放映和电影制作效果所示。

code

//blend two imgs
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>


using namespace cv;
using namespace std;


int main(void)
{
    double alpha = 0.5; //control alpha
    
    double beta; double input;
    Mat src1, src2, dst;

    cout << " Simple Linear Blender " << endl;
    cout << "-----------------------" << endl;
    cout << "* Enter alpha [0.0-1.0]: ";

    cin >> input;// We use the alpha provided by the user if it is between 0 and 1

    if (input >= 0 && input <= 1)
    {
        alpha = input;
    }
    src1 = imread("Linux.jpg");
    src2 = imread("Windows.jpg");

    if (src1.empty()) { cout << "Error loading src1" << endl; return -1; }
    if (src2.empty()) { cout << "Error loading src2" << endl; return -1; }

    beta = (1.0 - alpha);

    
    addWeighted(src1, alpha, src2, beta, 0.0, dst);

    imshow("Linear Blend", dst);
    waitKey(0);
    return 0;
}

解释

混合公式

需要两个原图 ( f0(x) and f1(x)):

src1 = imread("Linux.jpg");
src2 = imread("Windows.jpg");

注意:src1和src2必须有一样的size(weight, height)和type。

现在我们需要生成g(x)图像。为此,函数addWeighted()非常方便:

beta = (1.0 - alpha);
addWeighted(src1, alpha, src2, beta, 0.0, dst);

因为addWeighted()产生:

在这种情况下,在上面的代码中,gamma是参数0.0

结果

相关文章

网友评论

    本文标题:使用Opencv混合两个图像

    本文链接:https://www.haomeiwen.com/subject/yaaeextx.html