一、两幅图像线性混合
线性混合,就是g(x) = a*f1(x) + b*f2(x)。其中g为输出,f1、f2为输入。a+b=1。
作用1:线性混合可以用于去噪,假设噪声的产生符合均值为零、标准差的独立分布。多个高斯分布求平均值,即可去除噪声。
作用2:用于两张图片的切换。a从大到小变化,b从小到大变化。g就渐渐从f1变到f2。
OpenCV提供了addWeighted函数,完成上述功能:
C++: void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1)
dst = src1*alpha + src2*beta + gamma;
最后一个参数dtype是dst的depth,默认为-1,等同于src1的depth。
二、改变图像的亮度和对比度
和线性混合差不多,只不过g(x) = af(x) + b。其中g为输出,f为输入,a和b为常数的系数。
OpenCV提供了convertTo函数完成这个运算:
C++: void Mat::convertTo(OutputArray m, int rtype, double alpha=1, double beta=0 ) const
公式:
第二个参数rtype是输出图像的类型信息,一般与输入相同,设定rtype为负数(如-1)即可。