目标
本小节将学习如下内容:
- 什么是线性混合及其价值
- 如何通过addWeighted()方法混合两张图像
理论
注:
下述内容引用自书籍Computer Vision: Algorithms and Applications。
从之前的教程中我们已经学习到了单个像素的操作。接下来我们将使用二元操作方法进行图像混合:
通过改变α的大小可以改变图像混合的效果,是不是跟制作电影或者幻灯片一样炫酷。
源代码
double alpha = 0.5; double beta; double input;
System.loadLibrary("libs/"+ Core.NATIVE_LIBRARY_NAME);
String filename1 = "images/lena.jpg";
String filename2 = "images/opencv.jpg";
Mat src1 = imread(filename1);
Mat src3 = imread(filename2);
Mat src2 = new Mat();
resize(src3,src2,src1.size());
Mat dst = new Mat();
beta = ( 1.0 - alpha );
addWeighted( src1, alpha, src2, beta, 0.0, dst);
imshow("Linear Blend", dst);
waitKey(0);
System.exit(0);
解释
代码内容比较简单,首先我们需要打开两张图像,由于我没找到两张一样大小的图像,因此先将src2图像利用resize()方法重新调整大小跟src1一致。
resize(src2,src3,src1.size());
调用addWeighted() 方法:
addWeighted( src1, alpha, src2, beta, 0.0, dst);
上述代码公式为:
该方法中γ参数设置成0.
结果
大家可以尝试改变α,β,γ三个参数。