1 目标
(1) 什么是线性混合,有什么用?
(2) 怎样使用addWeighted混合两幅图像?
2 原理
详细的理论请参考计算机视觉:算法和应用一书。
这里我们直接应用其公式:

对于上面的公式,很有理解,等式右边就是两个像素值相加,但是权重比不同。所以,我们通过变化 ,区间是[0,1],这个操作就能带来一副由两幅图片临时相加得到的图像。如果将其应用在幻灯片放映或者视频播放中,岂不是很酷?
3 代码实现
道理很简单,直接上代码:

#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;/// Ask the user enter alphastd::cout<<" Simple Linear Blender "<<std::endl;std::cout<<"-----------------------"<<std::endl;std::cout<<"* Enter alpha [0-1]: ";std::cin>>input;/// We use the alpha provided by the user if it is between 0 and 1if( input >= 0.0 && input <= 1.0 ){ alpha = input; }/// Read image ( same size, same type )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; }/// Create WindowsnamedWindow("Linear Blend", 1);beta = ( 1.0 - alpha );addWeighted( src1, alpha, src2, beta, 0.0, dst);imshow( "Linear Blend", dst );waitKey(0);return 0;
}

4 代码解释
(1)为了实现上面的公式,

我们需要两幅源图像 ,我们使用下面的代码载入:

src1 = imread("../images/LinuxLogo.jpg");
src2 = imread("../images/WindowsLogo.jpg");
警告:因为我们要叠加src1和src2,所以两幅图片必须具有相同的大小(高和宽)和类型。

(2) 应用addWeighted

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

addWeighted的处理过程:

在这里, 就是上面代码中的0.0,它是一个标量,可以对合成后的图片进行像素的调整。
5 结论
运行结果:

上图中左半部分就是 = 0.0,右半部分是 = 100时的图片。

OpenCV实践(4)- 叠加两幅图片相关推荐

  1. 用VB实现两幅图片半透明叠加

    代码很简单,就不解释了,演示VB如何实现两幅图片半透明叠加的效果. Option ExplicitPrivate Declare Function CreateCompatibleDC Lib &qu ...

  2. HOG:从理论到OpenCV实践

    HOG:从理论到OpenCV实践 时间 2014-03-11 22:55:57 CSDN博客 原文  http://blog.csdn.net/zhazhiqiang/article/details/ ...

  3. 如何通过 C# 比较两幅图片的相似度?

    咨询区 Byyo 我在用 C# 实现一个可以查找重复图片的小工具,我目前是给每一个图片做一个 md5 码,然后通过 md5 值来判断图片是否相同. 但现实情况要复杂的多,比如: 图片被旋转了,比如:9 ...

  4. OpenCV实践之路——人脸识别之一数据收集和预处理

    本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51386949 微博:http ...

  5. OpenCV实践小项目(一): 信用卡数字识别

    1. 写在前面 今天整理一个OpenCV实践的小项目, 前几天整理了一篇OpenCV处理图像的知识笔记,后面,就通过一些小项目把这些知识运用到实践中去,一个是加深理解,另一个是融会贯通,连成整体,因为 ...

  6. 使用OpenCV进行图像修复、Navier-Stokes、INPAINT_TELEA,专栏:各种openCV实践的案例

    专栏连接:openCV练习-各种openCV实践的案例 前言 使用OpenCV进行图像修复,在ps里面有现成的功能,但是今天使用代码尝试了下,感觉效果还不错. 这个代码对比较细长的划痕.破损修复的效果 ...

  7. Android OpenCV实现图片叠加,水印

    关于如何用纯OpenCV实现图片叠加的例子实在是太少,太多的是使用 C++,JNI实现的,如果要用C++的话,我们为啥不转行做C++ 下面的例子基于 Android JavaCV 实现了在im_bea ...

  8. 【Opencv】【OpenCV实践】【OpenCV的使用学习记录】【fmt学习记录】

    [Opencv][OpenCV实践][OpenCV的使用学习记录][fmt学习记录] 0 前言 1 opencv使用说明 1.1 头文件的使用 1.2 CMakeLists.txt的使用 1.3 代码 ...

  9. opencv_python拉动进度条实现两幅图片融合及一幅图片自动平滑切换成另一张图片

    一.拉动进度条实现两幅图片融合: 主要函数:cv2.createTrackbar()相关参数 int createTrackbar(const string& trackbarname, co ...

最新文章

  1. Java面试参考指南——同步
  2. Android BLE学习(三):编写自己的 BLE蓝牙读写工具(功能仿照nrf master control panel)
  3. Android系统性能优化(59)----代码、图片和布局优化
  4. 翁恺老师C语言学习笔记(十)指针_指针运算
  5. Atheros对Ralink,看WiFi产品的射频电路设计
  6. 贱人工具箱使用技巧2——多重复制命令
  7. 陀螺仪和加速度传感器
  8. oracle12c不使用cdb模式,oracle 12c non-cdb升级成cdb模式
  9. MYSQL统计收益排名
  10. gorm中一对一,多对多关系
  11. 基于文档注释接口文档生成工具(代码0侵入附源码)
  12. 随机事件与概率术语与主题
  13. 【已补蓝奏云链接】PyTorch中MNIST数据集(附datasets.MNIST离线包)下载慢/安装慢的解决方案
  14. PMBOK 第六版 识别风险:工具与技术——提示清单
  15. 计算机相关名人,探寻计算机发展史上的名人足迹
  16. Vi,Java,Ant,Junit的自学报告
  17. MySQL索引(一)—— 索引介绍
  18. window.location的使用,能查看当前网址的端口等等
  19. mysql8.0如何授权_MySQL8.0 创建用户及授权
  20. 郭明錤:Meta收缩有利于VR竞品发展,苹果XR头显将改变行业规则

热门文章

  1. 计算机应用团队,【计算机应用论文】团队合作学习下计算机应用论文(共3025字)...
  2. Android基于Facebook Rebound的动画效果框架Backboard demo (非常炫酷)
  3. 无盘服务器吃鸡卡,无盘新手必备知识
  4. 自旋锁使用场景和实现分析(转载)
  5. ArcGIS License Manager许可升级的方法及无法读取许可问题
  6. stimulsoft oracle,报表仪表设计器Stimulsoft的处理数据功能
  7. 乓乓响冲刺港股:年营收2.2亿 核心收入靠给幼儿园供餐
  8. php访问微信云数据库,第三方服务器php获取微信小程序云开发access_token和云数据库...
  9. 苹果手机怎么用计算机隐藏应用,iPhone计算器魔术 iPhone计算器隐藏功能
  10. 速写人物的脸型怎么画?如何画好人物脸型?