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、创建一个窗口,显示图像并且等待用户结束程序

结果

时间: 2024-10-03 13:45:14

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY——Adding (blending) two images using OpenCV的相关文章

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

2.5 改变图像的对比度和明暗 目标 在教程中,你会学到如何: 1.读取像素值 2.用0初始化一个矩阵 3.学习staurate_cast是做什么的 4.获取有关像素变换的一些更酷的信息(Get some cool info about pixel transformations) 理论 注意,下面的解释来自于Richard Szeliski所写的<Computer Vision:Algorithms and Applications> 图像处理 1.一般的图像处理机是一个接受一个或多个输入图

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— File Input and Output using XML and YAML files

2.9XML和YAML格式作为文件输入输出 目标 你会从文中找到下面问题的答案: 1.如何从OpenCV使用的YAML或者XML文件中读取和打印文字条目.? 2.对于OpenCV数据结构如何做到相同的事情? 3.对你的数据结构如何做到? 4.OpenCV的数据结构,例如FileStorage,FileNode或者FileNodeIterator的使用方法. 源代码 你可以从这里下载代码或者从OpenCV的源代码库的samples/cpp/tutorial_code/core/file_input

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— Interoperability with OpenCV 1

2.10 和OpenCV的互用性 目标 对于OpenCV的开发团队来说,不断提升OpenCV库是非常重要的.我们不断考虑那些可以减轻你工作过程的方法,同时还要保障库的灵活性.新的C++接口就是我们为了这个而开发出来的东西.然而,向后兼容性仍然是很重要的.我们不想打碎那些你使用更早的OpenCV库写下的代码.因此,我们为了保障这个事情从而加上了一些函数.在下面的教程中,你会学习到: 1.相比于同样使用的第一版本的OpenCV库,第二版本中有了什么变化. 2.如何在图像中添加一些高斯噪点. 3.什么

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY——Random genenrator and text with OpenCV

2.7 随机产生器和OpenCV当中的文字 目标 在教程中,你会学习到: 1.使用随机数字产生类(RNG)并且如何从均匀分布中获得随机数字. 2.使用OpenCV的putText函数在窗口中显示文字 代码 1.在前一个的教程(Basic Drawing)中,我们画了不同的几何图形,给出了例如坐标(使用Points形式的)的输入参数,颜色,线条粗细,等等.你可能已经注意到我们对于那些参数都是给出了特殊的值. 2.在本教程中,我们打算使用为绘图参数使用随机值.同样,我们打算使用大量的几何图形来填满我

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— Discrete Fourier Transform

2.8 离散的傅立叶变换 目标 我们要寻找以下问题的答案: 1.什么是傅立叶变换,为什么我们要用这个? 2.在OpenCV中如何做到? 3.例如copyMakeBorder(),merge(),dft(),getOptimalDFGSize(),log()以及normalize()函数的用法. 源代码 你可以从这里下载或者从samples/cpp/tutorial_code/core/discrete_fourier_transform/discrete找到代码. #include "openc

OpenCV_Tutorials——CORE MODULE.THE CORE FUNCTIONALITY—— Mat - The Basic Image Container

在家这段时间内,发现了这样的OpenCV库自带的教程,感觉不错,尝试翻译并且添加一些tips,帮助自己学习,同时也与各位交流一下. 核心模块.核心功能 这里这两部分说的是核心模块以及核心功能的简介,其中蓝字部分可以链接到相关部分,这里我采用顺序方法,从第一部分,即 “Mat:The Basic Image Container”开始叙述. 2.1 基本的图像容器—矩阵 目标 我们可以通过许多途径从真实世界获取数字图像,例如:数码相机.扫描仪.计算机断层扫描以及磁成像共振等等.不管怎样,那些都只是我

OpenCV Tutorials &mdash;&mdash; Adding (blending) two images using OpenCV

An interesting dyadic (two-input) operator is thelinear blend operator:   #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

Nginx - Core Module Directives

The following is the list of directives made available by the Core module. Most of these directives must be placed at the root of the configuration file and can only be used once. However, some of them are valid in multiple contexts. If that is the c

AngularJS------Error: Cannot find module &#39;@angular-devkit/core&#39;

如图: 解决方法: 进入项目目录下执行以下代码 npm i --save-dev @angular-devkit/core AngularJS------Error: Cannot find module '@angular-devkit/core' 原文地址:https://www.cnblogs.com/tianhengblogs/p/8452045.html