OpenCV书中线性混合操作
个人理解
图像混合就是将两个尺寸一样的图像按照一定的比例混合到一起,比如我们配置颜料,我们也是按照一定的比例去配置,所有的比例之和为1。
代码
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/video.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
//0.定义一些局部变量
double alphaValue = 0.5;
double betaValue;
Mat srcImage2, srcImage3, dstImage;
//1.读取图像,两幅图片必须同样的尺寸和类型
srcImage2 = imread("700erha.jpg");
srcImage3 = imread("700levi.jpg");
//2.做图像混合加权操作
betaValue = 1.0 - alphaValue;
addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage);
//3.创建并显示原图
namedWindow("原图", 1);
imshow("原图", srcImage2);
namedWindow("效果图", 1);
imshow("效果图", dstImage);
waitKey(0);
return 0;
}
解析
用到的OpenCV中的API
CV_EXPORTS_W void addWeighted(
InputArray src1,
double alpha,
InputArray src2,
double beta,
double gamma,
OutputArray dst,
int dtype = -1
);
函数介绍和参数解析
参数1:输入图像Mat – src1
参数2:输入图像src1的alpha值(所占比重)
参数3:输入图像Mat – src2
参数4:输入图像src2的beta值(所占比重)
参数5:gamma值
参数6:输出混合图像
参数7:默认参数
注意点:两张图像的大小和类型必须一致才可以。
简单的说就是要把两个图混合起来,就需要两个图像数据,并且知道我们要混合的两个图像自己所占的比重,比重和为1,比重越大,则在混合图像中越明显,通常比重为1或者为0基本没什么意义。
ps: 参数5 gamma值是额外添加的一个标量,可以让整体图有所改变,一般都是设为0