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

本文详细介绍了如何在C++中使用OpenCV库的addWeighted函数实现线性混合,通过给定的alpha参数结合两个图像。教程引用了RichardSzeliski的《计算机视觉:算法和应用》一书,并提供了实例代码和相关书籍推荐。
摘要由CSDN通过智能技术生成

目标

在本教程中,您将学习:

  • 什么是线性混合以及为什么它有用;
  • 如何使用 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 = imreadsamples::findFile“LinuxLogo.jpg”) );
src2 = imreadsamples::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 = imreadsamples::findFile“LinuxLogo.jpg”) );
src2 = imreadsamples::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

   在线教程

有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

请添加图片描述

人工智能书籍

第一阶段:零基础入门(3-6个月)

新手应首先通过少而精的学习,看到全景图,建立大局观。 通过完成小实验,建立信心,才能避免“从入门到放弃”的尴尬。因此,第一阶段只推荐4本最必要的书(而且这些书到了第二、三阶段也能继续用),入门以后,在后续学习中再“哪里不会补哪里”即可。

第二阶段:基础进阶(3-6个月)

熟读《机器学习算法的数学解析与Python实现》并动手实践后,你已经对机器学习有了基本的了解,不再是小白了。这时可以开始触类旁通,学习热门技术,加强实践水平。在深入学习的同时,也可以探索自己感兴趣的方向,为求职面试打好基础。

第三阶段:工作应用

这一阶段你已经不再需要引导,只需要一些推荐书目。如果你从入门时就确认了未来的工作方向,可以在第二阶段就提前阅读相关入门书籍(对应“商业落地五大方向”中的前两本),然后再“哪里不会补哪里”。

 有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

 

  • 30
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值