qt opencv 占内存越来越大

作者:fly 发布于:2016-8-8 15:31 分类:Linux

除了new的对象我们知道要delete。OpenCV中使用cvCreateImage()新建一个IplImage*,以及使用cvCreateMat()新建一个CvMat*,都需要cvReleaseImage()  cvReleaseMat()显示的释放.


IplImage* subImg=cvCreateImage( cvSize((img->width)*scale,(img->height)*scale), 8, 3 );  
CvMat *tempMat=cvCreateMat((img->width)*scale,(maxFace->height)*scale,CV_MAKETYPE(image->depth,image->nChannels));  
cvReleaseImage(&subImg);  
cvReleaseMat(&tempMat);



另外一些函数要用到 CvSeq*来存放结果(通常这些都要用cvCreateMemStorage()事先分配一块内存CvMemStorage*),都要是释放掉相应的内存,这是很难找的。

CvMemStorage* m_storage=cvCreateMemStorage(0);  
CvSeq * m_contour=0;  
cvFindContours( img, m_storage, &m_contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));  
//释放内存  
cvReleaseMemStorage(&m_storage); 

以及人脸识别中检测人脸的函数

CvMemStorage* m_storage=cvCreateMemStorage(0);  
CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );  
CvSeq* faces = cvHaarDetectObjects( img, cascade, m_storage,1.1, 2, 0,cvSize(30, 30) );  
//释放内存  
cvReleaseMemStorage( &faces->storage);  
cvReleaseHaarClassifierCascade( &cascade ); 
注意这里我们可以使用
cvReleaseMemStorage( &faces->storage);
来释放m_storate,也可以使用:
cvReleaseMemStorage(&m_storage);
释放内存,这是等效的,但一定不要用两次!!


发表评论:

 
Powered by emlog sitemap