Insufficient memoryin cv::OutOfMemoryError

1、问题描述

近来需要跑一个稍微大一点的程序。需要反复读入程序,然后最终出现了如下的图片所示内容。


2、解决方案

(1)内存占据随着图片读的使用而逐渐变大。或许你是一次次的覆盖性的修改,但是,这些图像分配的空间在你的程序执行完结之前都是一直累积着的。一个752*480大小的图像,每次泄露的内存大约为1M[1]。

Every time you go through the loop, you create new buffers for eig_image and temp_image, and leak the old ones. Those leaked buffers build up until you run out of memory.[2]

(2)所以需要不断的去释放使用过的内存,并回收那些内存。我还没有想到,自己的程序已经大的需要回收内存的地步了。

图像内存的创建与回收

			const char* imagename ="fire.bmp"; //将图像的名字赋值给imagename变量,方便后边的使用情况
			IplImage * img = cvLoadImage(imagename);  
			if(!img)  
			{  
				fprintf(stderr, "Can not load image %s\n", imagename);  
				return -1;  
			}
			cvReleaseImage(&img);

轮廓算子的创建于回收:

storage = cvCreateMemStorage(0);

int cntnum = 0;        //cntnum是外接矩形框的个数

cntnum = cvFindContours(inputimg, storage, &contour, sizeof(CvContour),CV_RETR_EXTERNAL  , CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0));

cvReleaseMemStorage(&storage);//cvClearMemStorage(storage);

矩阵的创建与回收:

CvMat* SVMtrainMat=cvCreateMat(1,nDim,CV_32FC1);  
//矩阵使用
cvReleaseMat(&SVMtrainMat);//使用完毕释放空间


3、参考文献和致谢

[1]http://blog.sina.com.cn/s/blog_67a7426a0101czyr.html

[2]http://stackoverflow.com/questions/4663789/error-insufficient-memory-opencv

[3]http://blog.csdn.net/fulva/article/details/7393043

[4]http://www.opencv.org.cn/forum.php?mod=viewthread&tid=31277


版权声明:本文为a1456123a原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。