OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY——Adding (blending) two images using OpenCV...

目标

在教程中你会学到:

      1、什么事线性混合,它有什么用。

      2、如何使用addWeighted将两个图像相加

理论


注意:下面的解释来自Richard Szeliski写的《Computer Vision:Algorithms and Application》。


 

 

在前面的教程中,我们已经学习了一些像素的运算。一个有意思的二元(两个输入)运算符就是线性混合运算符:

                  

通过α从0到1变化这个运算符可以被用做两个图像或者录像之间的时间交融(cross-dissolve,这里tutorial里面用的是cross-disolve 可能错误),就像是幻灯片中或者电影制作中的效果。

代码

      一般来说,在不算长的理论解释之后,让我们来看一下代码。

 

#include<cv.h>
#include<highgui.h>
#include<iostream>
using namespace cv;

int main(int argc.char**argv)
{
double alpha=0.5;
double beta;
double input;
Mat src1,src2,dst;

std::cout<<"Simple Linear Blender"<<std::endl;
std::cout<<"--------------------------"<<std::endl;
std::cout<<"*Enter alpha [0-1]:";
std::cin>>input;
if(input>=0.0&&input<=1.0)
{
alpha=input;
}
src1=imread("../../images/LinuxLogo.jpg");
src2=imread("../../images/WindowsLogo.jpg");
if(!src1.data)
{
printf("Error loading src1\n");
return -1;
}
if(!src2.data)
{
printf("Error loading src2\n");
return -1;
}
nameWindow("Linear Blend",1);
beta=(1.0-alpha);
addWeighted(src1,alpha,src2,beta,0.0,dst);
imshwo("Linear Blend",dst);
waitKey(0);
return 0;
}

 

解释

    1、因为我们要执行:

 

     我们需要两个源图像(f0(x)和f1(x)),因此我们使用一般的方法进行载入:

     

src1=imread("../../images/LinuxLogo.jpg");
src2=imread("../../images/WindowsLogo.jpg");

 


警告:因为我们要将src1和src2相结合,他们必须是同样的大小(宽和高)和类型


 

 

 

      2、现在我们需要产生g(x)的图像。这样addWeighted就用起来很方便了。

      

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

 

       因为addWeighted产生:

                                dst=α*src1+β*src2+γ

       在这个例子中,γ在上面的代码中是0.0。

    3、创建一个窗口,显示图像并且等待用户结束程序

结果

 

转载于:https://www.cnblogs.com/dmq5488287/p/4506430.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值