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

目标

  • 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撰写的《计算机视觉:算法和应用》一书

在之前的教程中,我们已经了解了一些像素操作符。一个有趣的二元(双输入)算子是线性混合算子:

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

       通过改变α从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()

说明 

因为我们要执行:g(x) = (1 - \alpha)f_{0}(x) + \alpha f_{1}(x);我们需要两张原始图像(f_{0}(x)f_{1}(x))。所以我们通常以下列方式加载它们:

src1 = cv.imread(cv.samples.findFile('LinuxLogo.jpg'))
src2 = cv.imread(cv.samples.findFile('WindowsLogo.jpg'))

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

Warning:由于我们要添加 src1src2,因此它们都必须具有相同的大小(宽度和高度)和类型。

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

   beta = ( 1.0 - alpha );
   addWeighted( src1, alpha, src2, beta, 0.0, dst);

因为addWeighted() 产生:

                                                  dst = \alpha \cdot src1 + \beta \cdot src2 + \gamma

(In this case, gamma is the argument 0.0 in the code above.|| 本例中,在上方所示代码里gamma是参数:0.0)

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

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

结果展示:

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值