OpenCv基础(三):图像的混合
原理
以下解释基于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)基金净值