目标
- what is linear blending and why it is useful(什么是线性混合以及为什么有用?)
- how to add two images using addWeighted() (如何使用addWeighted()添加两个图像)
理论
注意
The explanation below belongs to the book Computer Vision: Algorithms and Applications by Richard Szeliski
以下解释属于Richard Szeliski撰写的《计算机视觉:算法和应用》一书
在之前的教程中,我们已经了解了一些像素操作符。一个有趣的二元(双输入)算子是线性混合算子:
通过改变α从0 \ rightarrow 10→1这个操作符可以用来执行两个图像或视频之间的时间交叉溶解,正如在幻灯片和电影制作中可以看到的那样。
源代码(Python)
from __future__ import print_function
import cv2 as cv
alpha = 0.5
-------------------------------------
try:
raw_input # Python 2
except NameError:
raw_input = input # Python 3
print(''' Simple Linear Blender
-------------------------------------
* Enter alpha [0.0-1.0]: ''')
input_alpha = float(raw_input().strip())
if 0 <= alpha <= 1:
alpha = input_alpha
# [load]
src1 = cv.imread(cv.samples.findFile('LinuxLogo.jpg'))
src2 = cv.imread(cv.samples.findFile('WindowsLogo.jpg'))
# [load]
if src1 is None:
print("Error loading src1")
exit(-1)
elif src2 is None:
print("Error loading src2")
exit(-1)
# [blend_images]
beta = (1.0 - alpha)
dst = cv.addWeighted(src1, alpha, src2, beta, 0.0)
# [blend_images]
# [display]
cv.imshow('dst', dst)
cv.waitKey(0)
# [display]
cv.destroyAllWindows()
说明
因为我们要执行:;我们需要两张原始图像(和)。所以我们通常以下列方式加载它们:
src1 = cv.imread(cv.samples.findFile('LinuxLogo.jpg'))
src2 = cv.imread(cv.samples.findFile('WindowsLogo.jpg'))
我们使用了以下图像:LinuxLogo.jpg和WindowsLogo.jpg。
Warning:由于我们要添加 src1和src2,因此它们都必须具有相同的大小(宽度和高度)和类型。
现在我们需要生成g(x)
图像。为此,功能addWeighted()非常方便:
beta = ( 1.0 - alpha );
addWeighted( src1, alpha, src2, beta, 0.0, dst);
因为addWeighted() 产生:
(In this case, gamma
is the argument 0.0 in the code above.|| 本例中,在上方所示代码里gamma是参数:0.0)
创建窗口,显示图像,然后等待用户结束程序。
imshow(“线性混合”,dst);
waitKey(0);
结果展示: