您的位置:首页 > 其它

cvAddWeighted 进行图片融合

2012-10-23 18:25 417 查看
cvAddWeighted( ) 是opencv中,将两个图片矩阵进行融合的一个很好的函数,可以得到很多有趣的效果。

其函数原型如下:

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大小)

注意:在这里src1,src2,以及dst,都必须是同样的图片类型,如:IPL_DEPTH_8U,在调用cvLoadImage( ) 时,打开方式也必须完全相同,这里1表示以三通道彩色图像方式输入,0表示以灰度图片格式输入,-1表示以原来图片的格式输入

看个例子:

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

int main(int argc, char* argv[])
{
IplImage *src1,*src2;
if(argc == 9 && (src1=cvLoadImage(argv[1],1))!=0 && (src2=cvLoadImage(argv[2],1))!=0)
{
IplImage *image=cvCreateImage(cvSize(275,313),IPL_DEPTH_8U,3);
cvResize(src2,image);
int x= atoi(argv[3]);
int y= atoi(argv[4]);
int width= atoi(argv[5]);
int height= atoi(argv[6]);
double alpha=(double)atof(argv[7]);
double beta=(double)atof(argv[8]);
cvSetImageROI(src1,cvRect(x,y,width,height));
cvSetImageROI(image,cvRect(10,10,width,height));
cvAddWeighted(src1,alpha,image,beta,0.0,src1);
cvResetImageROI(src1);
cvNamedWindow("Alpha_bend",1);
cvShowImage("Alpha_bend",src1);
cvWaitKey(0);
cvReleaseImage(&src1);
cvReleaseImage(&src2);
cvDestroyWindow("Alpha_bend");

}
return 0;
}


我的命令行参数是:cvAddWeighted.exe lena.jpg cat.jpg 235 221 115 156 0.8 0.2

当然这里还可以自己调整。

这里由于cat.jpg图片比较大,我先对他进行缩放,然后在和lena.jpg进行图片融合,当然融合的坐标点我实在ps里得到的。





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: