OpenCV笔记(四)——两幅图像线性混合、改变图像的亮度和对比度

一、两幅图像线性混合

线性混合,就是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

公式:m(x,y) = saturate \_ cast<rType>( \alpha (*this)(x,y) +  \beta )

第二个参数rtype是输出图像的类型信息,一般与输入相同,设定rtype为负数(如-1)即可。

 

posted @ 2014-11-20 10:26  nipan  阅读(924)  评论(0编辑  收藏  举报