opencv2 accumulate()函数的使用,用于求几幅图像的平均值

20151207

想把之前师姐用OpenCV1写的程序改为OpenCV2代码,从根本上解决程序中内存管理的问题。其中一个图像累加函数是用来求取背景,进而使用背景减除获取前景目标。

OpenCV1中的函数为void cvAcc(const CvArr* src, CvArr* dst, const CvAcc* mask=NULL),参数src为输入图像,可以为单通道或者三通道,8位或者32位浮点型。dst为累加目标图像,大小和通道数与输入图像相同,32位或者64位浮点型。mask为可选择的操作mask。

原程序代码为

IplImage *Igray1=cvCreateImage(cvSize ( Igray->width, Igray->height ), IPL_DEPTH_32F, 1);

IplImage *Igrayc = cvLoadImage( imagepath, CV_LOAD_IMAGE_GRAYSCALE );

cvAcc(Igrayc,Igray1); 

cvReleaseImage( &Igrayc );


OpenCV2中对应函数为void accumulate(InputArray src, InputOutputArray dst, InputArray mask=noArray() ),

参数同前,可用代码为

Mat img1=imread("D:\\sperm10060per.bmp",0);
imshow("src",img1);
Mat average=Mat::zeros(img1.size(),CV_32F);//存储累加后数据的对象赋值为零
accumulate(img1,average);//累加到average
Mat img3=imread("D:\\sperm10060per.bmp",0);
accumulate(img3,average);//再次累加
average/=2;//累加结果除以累加次数
average.convertTo(average,CV_8U);//如果显示需要将数据转换为8U
imshow("average",average);//显示

notice:如果显示图像,需要将图转换为CV_8U

参考Google搜索

你可能感兴趣的:(OpenCV2)