在程序中使用了opencv中的IplImage,可是使用一段时间后,发现内存慢慢增大,网上也查询了很多帖子,方法也使用不奏效,例如:
http://benson.is-programmer.com/posts/21042.html
http://zhaostudy2.blog.163.com/blog/static/135350205201010160541433/ 部分方法如下:
IplImag *img = cvCreateImage( cvSize(frame->width,frame->hight), frame->depth, frame->nChannels );
img = cvCloneImage(frame); 这里出现内存泄露,因为调用cvCloneImage()之前已经用cvCreateImage()为图像分配了内存空间,而cvCloneImage()函数是对源图像的所有数据的拷贝,包括图像头、数据、ROI等,这就导致原来分配的内存空间变成了内存碎片,造成内存泄露。.解决方法如下: IplImag *img = cvCloneImage(frame); 或 IplImag *img = cvCreateImage( cvSize(frame->width,frame->hight), frame->depth, frame->nChannels ); cvReleaseImage(&img);
img = cvCloneImage(frame); 或 IplImag *img = cvCreateImage( cvSize(frame->width,frame->hight), frame->depth, frame->nChannels );
img = cvCloneImage(frame); cvCopy(frame,img,NULL);
我用得是opencv1.0,因为使用的是VC6.0,可以使用其它办法的吗?比如opencv2.0 opencv2.3.1等等,是版本的问题?OpenCV内存泄露
http://benson.is-programmer.com/posts/21042.html
http://zhaostudy2.blog.163.com/blog/static/135350205201010160541433/ 部分方法如下:
IplImag *img = cvCreateImage( cvSize(frame->width,frame->hight), frame->depth, frame->nChannels );
img = cvCloneImage(frame); 这里出现内存泄露,因为调用cvCloneImage()之前已经用cvCreateImage()为图像分配了内存空间,而cvCloneImage()函数是对源图像的所有数据的拷贝,包括图像头、数据、ROI等,这就导致原来分配的内存空间变成了内存碎片,造成内存泄露。.解决方法如下: IplImag *img = cvCloneImage(frame); 或 IplImag *img = cvCreateImage( cvSize(frame->width,frame->hight), frame->depth, frame->nChannels ); cvReleaseImage(&img);
img = cvCloneImage(frame); 或 IplImag *img = cvCreateImage( cvSize(frame->width,frame->hight), frame->depth, frame->nChannels );
img = cvCloneImage(frame); cvCopy(frame,img,NULL);
我用得是opencv1.0,因为使用的是VC6.0,可以使用其它办法的吗?比如opencv2.0 opencv2.3.1等等,是版本的问题?OpenCV内存泄露
你干嘛非得用同一个变量又是复制,又是创建?
IplImage *crtImg = *** 创建,用完后cvReleaseImage(&crtImg)
IplImage *cpyImg = *** 复制,用完后cvReleaseImage(&cpyImg)
只要你记住创建了几个对象,就销毁几个,没事