初级图像混合——线性混合操作

addWeighted函数

 

这个函数的作用是,计算两个数组(图像阵列)的加权和。原型如下:

void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);  

  

  • 第一个参数,InputArray类型的src1,表示需要加权的第一个数组,常常填一个Mat。
  • 第二个参数,alpha,表示第一个数组的权重
  • 第三个参数,src2,表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数。
  • 第四个参数,beta,表示第二个数组的权重值。
  • 第五个参数,dst,输出的数组,它和输入的两个数组拥有相同的尺寸和通道数。
  • 第六个参数,gamma,一个加到权重总和上的标量值。看下面的式子自然会理解。
  • 第七个参数,dtype,输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()。

   代码实例:

//---------------------------------【LinearBlending()函数】-------------------------------------  
// 函数名:LinearBlending()  
// 描述:利用cv::addWeighted()函数实现图像线性混合  
//--------------------------------------------------------------------------------------------  
bool LinearBlending()  
{  
       //【0】定义一些局部变量  
       double alphaValue = 0.5;  
       double betaValue;  
       Mat srcImage2, srcImage3, dstImage;  
   
       //【1】读取图像 ( 两幅图片需为同样的类型和尺寸 )  
       srcImage2= imread("大寒.jpg");  
       srcImage3= imread("小寒.jpg");  
   
       if(!srcImage2.data ) { printf("读取srcImage2错误~! \n"); return false; }  
       if(!srcImage3.data ) { printf("读取srcImage3错误~! \n"); return false; }  
   
       //【2】做图像混合加权操作  
       betaValue= ( 1.0 - alphaValue );  
       addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage);  
   
       //【3】创建并显示原图窗口  
       namedWindow("<1>线性混合示例窗口【原图】 ", 1);  
       imshow("<1>线性混合示例窗口【原图】 ", srcImage2 );  
   
       namedWindow("<2>线性混合示例窗口【效果图】 ", 1);  
       imshow("<2>线性混合示例窗口【效果图】 ", dstImage );  
   
       return true;  
        
}  

  

 

 

 

posted @ 2016-11-08 16:03  啊琛  阅读(1049)  评论(0编辑  收藏  举报