图像直接相加:
#include <cv.h>
#include <highgui.h>using namespace cv;
int main( int argc, char** argv )
{
IplImage* src1=0; //声明IplImage指针
IplImage* src2=0;
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大小)