使用 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;同样的要用…

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;停止集群 总结 准备环境搭建 我们先…

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 中不推荐使用?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点…

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…

k8s---包管理器helm

内容预知 目录 内容预知 helm相关知识 Helm的简介与了解 helm的三个重要概念 helm的安装和使用 将软件包拖入master01上 使用 helm 安装 Chart 对chart的基本使用 查看chart信息 安装chart 对chart的基本管理 helm自定义模板 在镜像仓库中拉取chart&#xff0c;查…

大路灯和台灯哪个对眼睛好?学生备考大灯推荐

最近家长圈里开始流行这么一句话&#xff1a;鸡娃的尽头&#xff0c;是鸡眼。曾经绘画课、科学课、乐高课、思维课一样没落下&#xff0c;讲绘本、学英语也是每天的日常&#xff0c;周一到周日孩子的行程排得满满当当。可没想到有一天带着孩子去医院体检视力的时候&#xff0c;…

python 正则表达式学习(1)

正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 1. 特殊符号 1.1 符号含义 模式描述^匹配字符串的开头$匹配字符串的末尾.匹配任意字符&#xff0c;除了换行符&#xff0c;当re.DOTALL标记被指定时&#xff0c;则可以匹配包…

LangChain实战:老喻干货店社交网络Agent一

LangChain实战&#xff1a;老喻干货店社交网络Agent一 如果您也在准备AIGC前端全栈&#xff0c;LangChain是最成熟的AI应用开发框架。欢迎点赞收藏&#xff0c;一起学习AI。 LangChain 一 hello LLM LangChain 二 模型 LangChain 三 Data Connections LangChain 四 Prompts Lan…

大模型学习与实践笔记(十一)

一、使用OpenCompass 对模型进行测评 1.环境安装&#xff1a; git clone https://github.com/open-compass/opencompass cd opencompass pip install -e . 当github超时无法访问时&#xff0c;可以在原命令基础上加上地址&#xff1a; https://mirror.ghproxy.com git clon…

司铭宇老师:房地产中介销售培训课程:如何打消购房者买房疑虑

房地产中介销售培训课程&#xff1a;如何打消购房者买房疑虑 购房是一项重大的人生决定&#xff0c;它不仅涉及到巨大的经济投入&#xff0c;还关系到购房者未来的生活品质。因此&#xff0c;购房者在做出购买决定前往往会有许多疑虑和担忧。作为房地产销售人员&#xff0c;能够…