(代码3)图像相加(直接、加权)

11 篇文章 0 订阅

图像直接相加:

#include <cv.h>  

#include <highgui.h>  
using namespace cv;  
int main( int argc, char** argv )  
{  
    IplImage* src1=0; //声明IplImage指针

    IplImage* src2=0;


    src1 = cvLoadImage("stlucia_test_small0000.jpeg");     //载入图像
    src2 = cvLoadImage("stlucia_test_small0001.jpeg");
    IplImage* dst=cvCreateImage(cvGetSize(src1), src1->depth, src1->nChannels);//初始化dst

    if( !src1 ) { printf("Error loading src1 \n"); return -1; }  
    if( !src2) { printf("Error loading src2 \n"); return -1; }  
    // Create Windows  
    cvNamedWindow("Linear Blend", 1);  
    cvAdd( src1,src2,dst);  
    //cvSaveImage("addresult.jpeg",dst);
    cvShowImage( "Linear Blend", dst );  
    cvWaitKey(0);  
    cvDestroyWindow( "Linear Blend" );//销毁窗口
    cvReleaseImage( &src1 ); //释放图像
    cvReleaseImage( &src2 );
    cvReleaseImage( &dst );
    return 0;  

}


图像加权相加:

#include <cv.h>  
#include <highgui.h>  
#include <iostream>  
using namespace cv;  
int main( int argc, char** argv )  
{  
 double alpha = 0.5; double beta; double input;  
    // Ask the user enter alpha  
    std::cout<<" Simple Linear Blender "<<std::endl;  
    std::cout<<"-----------------------"<<std::endl;  
    std::cout<<"* Enter alpha [0-1]: ";  
    std::cin>>input;  
    // We use the alpha provided by the user iff it is between 0 and 1  
    if( alpha >= 0 && alpha <= 1 )  
    {   
        alpha = input;  
    }  
    IplImage* src1=0; 
    IplImage* src2=0;
src1 = cvLoadImage("stlucia_test_small0000.jpeg");
src2 = cvLoadImage("stlucia_test_small0001.jpeg");
IplImage* dst=cvCreateImage(cvGetSize(src1), src1->depth, src1->nChannels);

    if( !src1 ) { printf("Error loading src1 \n"); return -1; }  
    if( !src2) { printf("Error loading src2 \n"); return -1; }  

    cvNamedWindow("Linear Blend", 1);  
     beta = ( 1.0 - alpha );  
    cvAddWeighted( src1, alpha, src2, beta, 0.0, dst); 
//cvSaveImage("addresult.jpeg",dst);
    cvShowImage( "Linear Blend", dst );  
    cvWaitKey(0);  
cvDestroyWindow( "Linear Blend" );
    cvReleaseImage( &src1 ); 
cvReleaseImage( &src2 );
cvReleaseImage( &dst );
    return 0;  
}


附函数相加说明:

Add

计算两个数组中每个元素的和: 

          void cvAdd( const CvArr* src1, const CvArr* src2, CvArr* dst, const CvArr* mask=NULL );

src1
第一个原数组
src2
第二个原数组
dst
输出数组
mask
操作的复盖面, 8-bit单通道数组; 只有复盖面指定的输出数组被修改。

函数 cvAdd 加一个数组到别一个数组中:

           dst(I)=src1(I)+src2(I) if mask(I)!=0


AddWeighted

计算两数组的加权值的和

   void cvAddWeighted( const CvArr* src1, double alpha,const CvArr* src2, double beta, double gamma, CvArr* dst );

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

函数 cvAddWeighted 计算两数组的加权值的和:

      dst(I)=src1(I)*alpha+src2(I)*beta+gamma

所有的数组必须有相同的类型相同的大小(或ROI大小)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值