使用 OpenCV 添加(混合)两个图像

目标

在本教程中,您将学习:

  • 什么是线性混合以及为什么它有用;
  • 如何使用 addWeighted() 添加两个图像

理论

注意

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

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

\[g(x) = (1 - \alpha)f_{0}(x) + \alpha f_{1}(x)\]

通过改变 \(\alpha\) 与 \(0 \rightarrow 1\) 相比,此运算符可用于在两个图像或视频之间执行时间交叉融合,如幻灯片放映和电影制作中所示(很酷,嗯?

源代码

C++爪哇岛蟒

从此处下载源代码。

#include“opencv2/imgcodecs.hpp”
#include“opencv2/highgui.hpp”
#include < iostream>
使用命名空间 CV;
我们在这里不是“使用命名空间 std”,以避免 c++17 中 beta 变量和 std::beta 之间的冲突
使用 std::cin;
使用 std::cout;
使用 std::endl;
int main( 无效 )
{
阿尔法 = 0.5;贝塔;输入;
垫子 src1, src2, dst;
cout << “Simple Linear Blender ” << endl;
cout << “-----------------------” << endl;
cout << “* 输入 alpha [0.0-1.0]: ”;
cin >>输入;
如果 alpha 介于 0 和 1 之间,我们使用用户提供的 alpha
if( 输入 >= 0 && 输入 <= 1 )
{ alpha = 输入;
src1 = imread( samples::findFile(“LinuxLogo.jpg”) );
src2 = imread( samples::findFile(“WindowsLogo.jpg”) );
if( src1.empty() ) { cout << “加载 src1 时出错” << endl;返回EXIT_FAILURE;}
if( src2.empty() ) { cout << “加载 src2 时出错” << endl;返回EXIT_FAILURE;}
贝塔 = ( 1.0 - 阿尔法 );
addWeighted( src1, alpha, src2, beta, 0.0, dst);
imshow( “线性混合”, dst );
waitKey(0);
返回 0;
}

解释

C++爪哇岛蟒

由于我们将要执行:

\[g(x) = (1 - \alpha)f_{0}(x) + \alpha f_{1}(x)\]

我们需要两个源图像(\(f_{0}(x)\)和\(f_{1}(x)\))。因此,我们以通常的方式加载它们:

src1 = imread( samples::findFile(“LinuxLogo.jpg”) );
src2 = imread( samples::findFile(“WindowsLogo.jpg”) );

我们使用了以下图像:LinuxLogo.jpg和WindowsLogo.jpg

警告

由于我们添加了 src1 和 src2,因此它们的大小(宽度和高度)和类型必须相同。

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

贝塔 = ( 1.0 - 阿尔法 );
addWeighted( src1, alpha, src2, beta, 0.0, dst);

因为 addWeighted() 产生:

dst=α⋅src1+β⋅src2+γ

在本例中,是上述代码中的参数 0.0gamma0.0

创建窗口,显示图像并等待用户结束程序。

imshow( “线性混合”, dst );
waitKey(0);

结果

Adding_Images_Tutorial_Result_Big.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW扫描探针显微镜系统开发

在纳米技术对高精度材料特性测量的需求日益增长。介绍了基于LabVIEW开发的扫描探针显微镜&#xff08;SPM&#xff09;系统。该系统不仅可以高效地测量材料的热物性&#xff0c;还能在纳米尺度上探究热电性质&#xff0c;为材料研究提供了强大的工具。 系统基于扫描探针显微技…

(2)(2.1) Andruav Android Cellular(二)

文章目录 前言 5 Andruav Web Client 6 Andruav Telemetry 7 Andruav高级功能 8 将Andruav与SITL配合使用 9 FAQ 10 术语表 前言 Andruav 是一个基于安卓的互联系统&#xff0c;它将安卓手机作为公司计算机&#xff0c;为你的无人机和遥控车增添先进功能。 5 Andruav W…

数学建模--PageRank算法的Python实现

文章目录 1. P a g e R a n k PageRank PageRank算法背景2. P a g e R a n k PageRank PageRank算法基础2.1. P a g e R a n k PageRank PageRank问题描述2.2.有向图模型2.3.随机游走模型 3. P a g e R a n k PageRank PageRank算法定义3.1. P a g e R a n k PageRank PageRank…

GD32接收不定长数据包

接收不定长数据 Cubemx生成代码过程忽略 首先在main函数中创建接收缓存区 并在main.h中定义 接下来就是重写串口的中断函数中的内容&#xff0c;把原有内容注释掉 main中创建一个记录接收数据长度的变量和标志位 然后再在主函数中添加一个验证代码&#xff0c;这样MCU收到数据…

Cesium叠加超图二维服务、三维场景模型

前言 Cesium作为开源的库要加超图的服务则需要适配层去桥接超图与Cesium的数据格式。这个工作iClient系列已经做好&#xff0c;相比用过超图二维的道友们可以理解&#xff1a;要用Openlayer加载超图二维&#xff0c;那就用iClient for Openlayer库去加载&#xff1b;同样的要用…

el-table导出表格文件

先写一个download公共的方法 download(file) {const blob fileconst blobURL window.URL ? window.URL.createObjectURL(blob) : window.webkitURL.createObjectURL(blob)const a document.createElement(a)a.download 故障的报表.xlsxa.href blobURLdocument.body.appen…

Git与GitHub零基础教学

大家好&#xff0c;我是星恒&#xff0c;这个帖子给大家分享的是git和github的全套教程&#xff0c;包含github初始&#xff0c;git常用命令以及基本使用&#xff0c;git的ssh链接github&#xff0c;github使用token登录&#xff0c;github和idea的配合&#xff0c;一些平时常用…

Flink编程——基础环境搭建

基础环境搭建 文章目录 基础环境搭建准备环境搭建源码环境搭建克隆代码编译导入IDEA 集群环境搭建本地模式安装步骤 1&#xff1a;下载步骤 2&#xff1a;启动集群步骤 3&#xff1a;提交作业&#xff08;Job&#xff09;步骤 4&#xff1a;停止集群 总结 准备环境搭建 我们先…

我们需要练习关爱自己,让自己松弛下来,而练习的方式就是慈心,祝福自己也祝福他人

非常正确&#xff01;关爱自己是维持身心健康的关键之一。通过慈心和祝福的方式&#xff0c;我们可以培养更积极、更宽容的心态&#xff0c;提升生活质量。以下是一些建议&#xff0c;帮助你在日常生活中练习关爱自己&#xff1a; 自我体谅&#xff1a; 对待自己要像对待朋友一…

国内SAP实施公司大盘点

随着企业数字化转型的加速推进&#xff0c;SAP作为全球有名的企业软件解决方案提供商&#xff0c;受到了越来越多企业的青睐。然而&#xff0c;要充分发挥SAP软件的潜力&#xff0c;企业需要依赖专业的SAP实施公司来提供技术支持和咨询服务。在国内&#xff0c;有许多优秀的SAP…

Spring ApplicationContext

ApplicationContext 在 Spring 中代表着一个高级的 IoC 容器&#xff0c;负责实例化、配置和组装对象。ApplicationContext 接口扩展自 BeanFactory 接口&#xff0c;添加了更多的企业级功能&#xff0c;比如更容易的国际化、事件传播、资源加载等。 ApplicationContext 接口关…

web3d-three.js场景设计器-天空包围盒-TWEEN.js

THREE.JS 实现场景天空包围盒&#xff0c;为了让场景背景更具体&#xff0c;而不是呆板的纯色&#xff0c;可以给厂家添加围绕的包围盒。 这里使用球体来实现&#xff0c;球体中央则是场景给球体添加天空的渐变色加入场景 代码如下 function createSky( hemiLight) { const …

学习笔记——克里金插值

有一篇大神的文章写得非常的具体&#xff0c; https://xg1990.com/blog/archives/222 下面写下一些学习笔记&#xff1a; 1、关于克里金插值的基本原理 克里金插值来源于地理学&#xff0c;它的前提是地理学第一定律&#xff1a;所有事物都与其他事务相关&#xff0c;但是近…

应用层—HTTP详解(抓包工具、报文格式、构造http等……)

文章目录 HTTP1. 抓包工具的使用1.1 配置信息1.2 观察数据 2. 分析 https 抓包结果3. HTTP请求详解3.1 认识 URL3.1.1 URL 基本格式3.1.2 查询字符串 (query string)3.1.3 关于 URL Encode 3.2 认识 http 方法3.2.1 [经典问题] Get 和 Post 主要的区别是什么&#xff1f;&#…

Java多线程并发篇----第二十九篇

系列文章目录 文章目录 系列文章目录前言一、什么是不可变对象,它对写并发应用有什么帮助二、Java 中用到的线程调度算法是什么?三、什么是线程组,为什么在 Java 中不推荐使用?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点…

美易官方《美国股市在全球金融市场中的地位举足轻重》

美国股市在全球金融市场中的地位举足轻重&#xff0c;吸引了众多顶尖投资高手和机构竞相角逐。作为全球最大的股票市场之一&#xff0c;美国股市以其独特的魅力和优势&#xff0c;成为了全球投资者瞩目的焦点。 首先&#xff0c;美国股市的规模巨大&#xff0c;流动性充裕&…

第十五届蓝桥杯单片机组——超声波测距

文章目录 一、超声波测距原理二、利用定时器实现测距2.1 结合定时器实现过程2.2 伪代码 三、代码示例 一、超声波测距原理 超声波测距是一种常用的测量距离的方法&#xff0c;凭借其非接触性、准确度高以及对环境因素影响小的优点&#xff0c;广泛应用于各类机器人、自动驾驶车…

C++11手撕线程池 call_once 单例模式 Singleton / condition_variable 与其使用场景

一、call_once 单例模式 Singleton 大家可以先看这篇文章&#xff1a;https://zh.cppreference.com/w/cpp/thread/call_once /*std::call_oncevoid call_once( std::once_flag& flag, Callable&& f, Args&&... args ); */ #include <iostream> #i…

DT浏览器的人工智能是如何学习知识的

DT浏览器的人工智能是如何学习知识的&#xff0c;DT浏览器的人工智能通过大量的数据和算法来实现知识学习的。这是一些学习知识的方式&#xff1a; 1. 数据驱动学习&#xff1a;通过处理和分析大量的文本数据来学习语言知识和语言模式。这些数据可以来自各种来源&#xff0c;如…

解决 pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本。

执行下面命令进行安装pnpm安装后 npm install -g pnpm 然后执行pnpm 报错 解决办法&#xff1a; 以管理员身份运行 Windows PowerShell &#xff0c; 在命令行输入以下命令后按回车&#xff0c; set-ExecutionPolicy RemoteSigned 再输入Y 回车即可。 再回到控制台输入p…