添加(混合)两幅图像
我们将学习如何混合两幅图像!
在本教程中,你将学到:
- 什么是线性混合(linear blending),以及它为何有用;
- 如何使用 addWeighted() 叠加两幅图像。
注: 以下解释摘自 Richard Szeliski 所著 Computer Vision: Algorithms and Applications 一书。
在之前的教程中,我们已经了解了一些像素运算符(pixel operator)。一个有趣的双目(两输入)运算符是线性混合运算符:
通过让 从 变化,该运算符可用于在两幅图像或两段视频之间执行时间上的*交叉溶解(cross-dissolve)*效果,正如幻灯片放映和电影制作中所见到的那样(很酷吧?)。
C++
可从此处下载源代码。
Java
可从此处下载源代码。
Python
可从此处下载源代码。
由于我们要执行:
我们需要两幅源图像( 和 )。因此,我们按常规方式加载它们:
(加载图像的代码实现见源代码。)
我们使用了以下图像:LinuxLogo.jpg 和 WindowsLogo.jpg。
警告: 由于我们要将 src1 和 src2 相加,二者必须具有相同的尺寸(宽和高)以及相同的类型。
现在我们需要生成 g(x) 图像。为此,addWeighted() 函数非常方便:
(混合图像的代码实现见源代码。)
Python 版本中该行对应的 NumPy 写法如下(但 cv 函数大约快 2 倍):
dst = np.uint8(alpha*(img1)+beta*(img2))
因为 addWeighted() 产生:
在此例中,gamma 就是上述代码中的参数 。
创建窗口、显示图像,并等待用户结束程序。
(显示图像的代码实现见源代码。)