利用函数参数实现图像混合

预备知识

cvAddWeighted函数格式:

/* dst = src1 * alpha + src2 * beta + gamma */
CVAPI(void)  cvAddWeighted( const CvArr* src1, double alpha,
                            const CvArr* src2, double beta,
                            double gamma, CvArr* dst );
参数:

  • src1 第一个原数组.  
  • alpha 第一个数组元素的权值  
  • src2 第二个原数组  
  • beta 第二个数组元素的权值
  • gamma 添加的常数项
  • dst 输出数组  

函数 cvAddWeighted 计算两数组的加权值的和:  dst(I)=src1(I)*alpha+src2(I)*beta+gamma  所有的数组必须有相同的类型相同的大小或ROI大小.

说明:

在cvAddWeighted函数中,有两个源图象src1 和 src2。这两个图象可以是任何象素类型,只要它们的类型相同。它们可以是单通道或是三通道,只要它们相符。运算结果的目标图象,dst必须和src1和src2有相同的象素类型。这些图象可以是不同的尺寸,但它们的ROI必须有相同的大小,否则OpenCV会报告一个错误。参数 alpha 是src1的混合强度,beta是src2的混合强度。

参考代码

IplImage* ImageAlpha(IplImage *pImg){   
    CvFont font;   
    float alpha_value;   
    char alpha_str[10];     
    
	IplImage *src1 = cvCloneImage(pImg);   
    IplImage *src2 = cvCreateImage(cvSize(src1->width/5, src1->height/5),src1->depth, src1->nChannels);   
    cvResize(src1, src2);   
      
    for (int x = 0; x < 5; x+=1){   
        for (int y = 0; y < 5; y+=1){   
            alpha_value = (float)(x+y*5)/(5 * 5-1);
            sprintf(alpha_str, "%.3f", alpha_value);   
            cvSetImageROI(src1,cvRect(x*(src1->width/5),y*(src1->height/5),  
                src1->width/5, src1->height/5));   
            cvAddWeighted(src2, alpha_value, src1, 1 - alpha_value, 0, src1);    
            cvResetImageROI(src1);   
        }   
    }        
    return src1;   
}
输出结果:

利用函数参数实现图像混合_第1张图片利用函数参数实现图像混合_第2张图片


关于Image Engineering & Computer Vision的更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.


你可能感兴趣的:(opencv,图像混合,cvAddWeighted)