OpenCv基础(三):图像的混合

发布时间:2024-11-11 18:04

原理

以下解释基于Richard Szeliski所著 Computer Vision: Algorithms and Applications
线性混合操作 也是一种典型的二元(两个输入)的 像素操作 :

g(x) = (1 - alpha)*f_0(x) + alpha *f_1(x)

通过在范围 0 –> 1 内改变 alpha ,这个操作可以用来对两幅图像或两段视频产生画面叠加 (cross-dissolve)效果。比如在不断递增的过程中,一张图片渐渐被替换为另一张图片(图片减隐的效果)

直接上测试代码吧:

void testAddWeight(){ Mat img = imread("test.jpg"); Mat result = imread("test_.jpg"); //test_.jpg和以上的图片尺寸相同 Mat out; //以下的代码将在一段时间内执行减隐效果,达到切换图片时渐隐的效果 for (double i = 0.0; i < 1; i += 0.01f){ addWeighted(img, i, result, 1.0 - i, 0.0, out); imshow("src1", img); imshow("src2", result); imshow("outAddWeightImg", out); waitKey(30); } waitKey(0); }123456789101112131415

程序运行结果如下:

这里写图片描述

具体实现如下

1、加载图片

为了达到g(x) = (1 - alpha)*f_0(x) + alpha*f_1(x)的效果
我们需要两幅输入图像 (f_{0}(x) 和 f_{1}(x))。相应地,我们使用常用的方法加载图像:

Mat img = imread("test.jpg"); Mat result = imread("test_.jpg"); //test_.jpg和以上的图片尺寸相同123

2、生成图像 g(x)

使用函数 addWeighted 可以很方便地实现生成:

addWeighted(img, i, result, 1.0 - i, 0.0, out);1

i代表alpha,(1.0-i)代表beta,然后addWeighted()函数将会对图像矩阵做如下运算:
out = alpha (点乘)img + beta (点乘) result + gamma

这里 gamma 对应于我上面代码中被设为 0.0 的参数

3、创建显示窗口显示图像

结束

网址:OpenCv基础(三):图像的混合 https://www.yuejiaxmz.com/news/view/35906

相关内容

Python的生活小技巧
MATLAB图像处理(包括图像类型转换)
中银健康生活混合(000591)基金净值
富国低碳环保混合(100056)基金净值
5个化妆的基础技巧
金鹰智慧生活混合A(002303)基金净值
易方达现代服务业混合(001857)基金净值
兴全趋势投资混合(LOF)(163402)基金净值
鹏华健康环保混合(002259)基金净值
华商健康生活混合(001106)基金净值

随便看看