本实例使用简单的线性叠加方法来实现两幅图像的叠加,主要使用的知识如下:

  1)线性融合

   

  2)addWeighted函数

  //! computes weighted sum of two arrays (dst = alpha*src1 + beta*src2 + gamma)

CV_EXPORTS_W void addWeighted(InputArray src1,
              double alpha,           
InputArray src2,         
              double beta,             
              double gamma,
              OutputArray dst,
              int dtype=-1
              );
Parameters
src1 – First source array.
alpha – Weight for the first array elements.
src2 – Second source array of the same size and channel number as src1 .
beta – Weight for the second array elements.
dst – Destination array that has the same size and number of channels as the input arrays.
gamma – Scalar added to each sum.
dtype – Optional depth of the destination array. When both input arrays have the same depth, dtype can be set to -1, which will be equivalent to src1.depth().

  代码如下:

//图像叠加(Mat)
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std; int main( int argc, char** argv )
{
double alpha = 0.5;
double beta;
double input;
Mat src1, src2, dst;
/// 请输入alpha值
cout<<" Simple Linear Blender "<<endl;
cout<<"-----------------------"<<endl;
cout<<"*Enter alpha [0-1]: "; /// 获取alpha输入
cin >> input;
if( input >= 0.0 && input <= 1.0 )
{
alpha = input;
}
/// 加载相同尺寸,相同格式的两张图像
src1 = imread("./Res/Windows7_logo.jpg");
src2 = imread("./Res/Windows7_text.jpg");
if( !src1.data )
{
printf("Error loading src1 \n");
return -;
}
if( !src2.data )
{
printf("Error loading src2 \n");
return -;
} /// 创建显示窗口
namedWindow("Image one", );
namedWindow("Image two", );
namedWindow("Linear Blend", ); /// 执行线性融合
beta = 1.0 - alpha;
addWeighted( src1, alpha, src2, beta, 0.0, dst); /// 显示结果
imshow( "Image one", src1 );
imshow( "Image two", src2 );
imshow( "Linear Blend", dst ); /// 等待键盘事件
waitKey();
return ;
}

  运行结果:

  

  

OpenCV学习:实现简单的图像叠加的更多相关文章

  1. 【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  2. 学习 opencv---(3) ROI 区域图像叠加&初级图像混合

    在这篇文章里,我们一起学习了在OpenCV中如何定义感兴趣区域ROI,如何使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操 ...

  3. 第十三节,OPenCV学习(二)图像的简单几何变换

    图像的简单几何变换 几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排 适当的几何变换可以最大程度地消除由于成像角度.透视关系乃至镜头自身原因所造成的几何失真所产生的的负面影响. 一.图像 ...

  4. 第十四节,OpenCV学习(三)图像的阈值分割

    图像的阈值处理 图像的阈值分割:图像的二值化(Binarization) 阈值分割法的特点是:适用于目标与背景灰度有较强对比的情况,重要的是背景或物体的灰度比较单一,而且总可以得到封闭且连通区域的边界 ...

  5. 【OpenCV学习笔记之一】图像加载,修改及保存

    加载图像(用cv::imread)imread功能是加载图像文件成为一个Mat对象 其中第一个参数表示图像文件名称第二个参数 表示加载的图像是什么类型 支持常见的三个参数值IMREAD_UNCHANG ...

  6. 第十二节,OpenCV学习(一)图像的读取、显示、保存

    一.读取图像 所谓的图像就是一个数组,对图像的处理就是对数字的处理 import cv2 import numpy as np img = cv2.imread('dog.jpg') print(im ...

  7. 【opencv学习笔记五】一个简单程序:图像读取与显示

    今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...

  8. OpenCV计算机视觉学习(2)——图像算术运算 & 掩膜mask操作(数值计算,图像融合,边界填充)

    在OpenCV中我们经常会遇到一个名字:Mask(掩膜).很多函数都使用到它,那么这个Mask到底是什么呢,下面我们从图像基本运算开始,一步一步学习掩膜. 1,图像算术运算 图像的算术运算有很多种,比 ...

  9. Opencv 图像叠加 添加水印

    Opencv 图像叠加 添加水印 C++: void Mat::copyTo(OutputArray m) const C++: void Mat::copyTo(OutputArray m, Inp ...

随机推荐

  1. 前端面试题 -- JS篇

    前端面试题 -- JS篇 类型 1.js中有哪些数据类型,并解释清楚原始数据类型和引用数据类型 js中共有null,undefined, string,number,boolean,object六种数 ...

  2. How do I create a List in Scala?

    Scala List class FAQ: How do I create a List in Scala? You can create a Scala List in several differ ...

  3. 基于python的接口测试框架设计(二)配置一些参数及文件

    基于python的接口测试框架设计(二)配置一些参数及文件 我这里需要基于我的项目配置的主要是登陆参数.以及baseURL ,把这些放在单独的文件里  毕竟导入的时候方便了一些 首先是url 图略 建 ...

  4. js屏蔽键盘按键

    3.1屏蔽键盘所有键 <script language="javascript"> <!-- function document.onkeydown(){ eve ...

  5. LeetCode: Populating Next Right Pointers in Each Node II 解题报告

    Populating Next Right Pointers in Each Node IIFollow up for problem "Populating Next Right Poin ...

  6. 【DataStructure】Linked Data Structures

    Arrayss work well for unordered sequences, and even for ordered squences if they don't change much. ...

  7. archdexls主题设置每页显示游戏数目

    archdexls主题,沒调整前,每页显示10个,这显然不够,尤其在搜狗浏览器上,由于这个主题只有触发下拉滚动条,才会自动在同一页面显示下一页,因此只显示10个甚至不能触发显示下一页这个动作. 原来设 ...

  8. 完美解决方案:wordpress后台进不去,用户名、密码输入了登陆没有反应(有更新)

    http://mingming4745.blog.163.com/blog/static/173845720119159425890/?suggestedreading ——————————————— ...

  9. node-webkit读取json文件

    1.原理 node-webkit包含了node.js,node.js提供了处理json数据文件的方法,通过node.js提供的方法,我们可以比较方便地读取json文件. 2.示例 这里我们读取的文件是 ...

  10. Jquery easyui tree 一些常见操作

    Tree: easyui tree的异步加载实现很简单,easyui的中文API文档中有实例(http://api.btboys.com/easyui/)——创建异步树形菜单,就是在tree node ...