2013-08-23 43 views
0

我試着用cvBlob做一些處理,但我發現它使用所有的RAM和我noticd這OpenCV的IplImage結構沒有得到回收利用

IplImage* image2=cvCloneImage(&(IplImage)thresh); 
IplImage *labelImg=cvCreateImage(cvGetSize(image2), IPL_DEPTH_LABEL, 1); 
cvb::CvBlobs blobs; 
unsigned int result=cvLabel(image2, labelImg, blobs); 
cvb::cvRenderBlobs(labelImg, blobs, image2, image2); 

for (cvb::CvBlobs::const_iterator it=blobs.begin(); it!=blobs.end(); ++it) 
{ 
    drawObject(it->second->centroid.x, it->second->centroid.y,camera); 
    drawLines(
     it->second->minx, 
     it->second->maxx, 
     it->second->minx, 
     it->second->maxx, 
     it->second->miny, 
     it->second->miny, 
     it->second->maxy, 
     it->second->maxy, 
     camera); 
} 
thresh = Mat(image2); 

創造IPLImages最初的兩個電話,他們泄露有關價值1mb的內存。每次迭代時,我的exe使用的內存增加2mb。如果我評論這些線,它會保持穩定。

tldr;我如何回收IPLImages

回答

0
cvReleaseImage(&image2); 
cvReleaseImage(&labelImg); 
cvReleaseBlobs(blobs); 
+1

改爲使用cv :: Mat。 – William