【Open CV基础】两张图片的Alpha融合

在Open CV的图像操作中,我们可以通过cvAddWeighted函数实现两张图片的融合,函数完整签名为:

void cvAddWeighted(
     const CvArr* src1, 
     double alpha,
     const CvArr* src2, 
     double beta,
     double gamma, 
     CvArr* dst 
 );
参数 意义
src1 第一张图片
alpha 融合时的第一张图片参数
src2 第二种图片
beta 融合时的第二种图片参数
gamma 常数项,往往取决于像素要调整到的平均值和最大值
dst 融合后的图片

此函数的功能就是加权融合图像,每个像素点的像素是两种源图片的对应像素点的像素加权算出来的,融合公式如下:

dst = alpha*src1 + beta*src2 + gamma
当alpha为a,beta为1-a,gamma为0,其中,a>=0且a<=1时,融合方程被称为标准融合方程。

下面是示例:


#include "cv.h"
#include "highgui.h"

int main(){
    //待融合的两张图片名
    char* imgStr1 = "faceScene.jpg";
    char* imgStr2 = "fruits.jpg";

    //打开两张图片
    IplImage* img1 = cvLoadImage(imgStr1);
    IplImage* img2 = cvLoadImage(imgStr2);

    //设置alpha、beta、gamma参数
    //设置三者的值分别为a,1-a和0,这是标准Alpha融合方程
    float alpha = 0.3;
    float beta = 0.7;
    float gamma = 0;

    //创建一张图片来接收融合的图片
    IplImage* dst = cvCreateImage(
        cvSize(img1->width, img1->height),
        img1->depth,
        3);

    //使用cvAddWeighted执行Alpha融合 
    cvAddWeighted(img1, alpha, img2, beta, gamma, dst);

    //输出三张图片查看效果
    char* s1 = "img1", *s2 = "img2", *s3 = "dst";
    cvNamedWindow(s1); cvNamedWindow(s2); cvNamedWindow(s3);
    cvShowImage(s1, img1); cvShowImage(s2, img2); cvShowImage(s3, dst);
    cvWaitKey(0);
    cvReleaseImage(&img1);
    cvReleaseImage(&img2);
    cvReleaseImage(&dst);
    cvDestroyWindow(s1); cvDestroyWindow(s2); cvDestroyWindow(s3);

}

效果图

待融合图片1:
【Open CV基础】两张图片的Alpha融合_第1张图片

待融合图片2:
【Open CV基础】两张图片的Alpha融合_第2张图片

融合成功后的图片:
【Open CV基础】两张图片的Alpha融合_第3张图片

你可能感兴趣的:(opencv,Alpha融合,加权融合)