初级图像混合——线性混合操作
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; }