gpt4 book ai didi

memory-management - 此代码C++ OpenCV中的内存泄漏在哪里?

转载 作者:行者123 更新时间:2023-12-02 17:54:08 25 4
gpt4 key购买 nike

这是代码

CvMemStorage *mem123 = cvCreateMemStorage(0);
CvSeq* ptr123;CvRect face_rect123;
CvHaarClassifierCascade* cascade123 = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt2.xml" ); //detects the face if it's frontal
void HeadDetection(IplImage* frame,CvRect* face){
ptr123=cvHaarDetectObjects(frame,cascade123,mem123,1.2,2,CV_HAAR_DO_CANNY_PRUNING);
if(!ptr123){return ;}
if(!(ptr123->total)){return ;}
face_rect123=*(CvRect*)cvGetSeqElem( ptr123, 0 ); //CvRect face_rect holds the position of Rectangle
face->height=face_rect123.height;
face->width=face_rect123.width;
face->x=face_rect123.x;
face->y=face_rect123.y;
return ;
}//detects the position of head and it is fed in CvRect*face as rectangle
int main(){
IplImage* oldframe=cvCreateImage(cvSize(640,480),8,3);
CvCapture* capture=cvCaptureFromCAM(CV_CAP_ANY);
CvRect a;a.height=0;a.width=0;a.x=0;a.y=0;
while(1){

oldframe=cvQueryFrame(capture); //real frame captured of size 640x480
cvFlip(oldframe,oldframe,1);
cvResize(oldframe,frame); //frame scaled down 4 times
HeadDetection(frame,&a);
cvShowImage("frame",frame);
cvWaitKey(1);
}
}

这里是“HeadDetection(frame,&a);”被评论,然后使用任务管理器,我看到angledetection.exe(我的项目名称)消耗了20188 Kb内存(然后没有发生内存泄漏)。

但是,如果我不评论taskmanager显示某些内存泄漏正在发生(大约300Kb / s)

我在64位Windows 7位OS(Core 2 Duo)上使用VS 2010。

这段代码试图通过OpenCV 2.1中的haar检测来检测人脸并获得正方形的四个角

如果有任何不清楚的地方,请询问。 :-)

提前致谢。

最佳答案

调用cvHaarDetectObjects时,您将获得指向对象的指针。

但是您永远不会释放它( ptr123 指向的对象)。

face_rect123 也未释放。

顺便说一句,您应该考虑重构代码,并为变量赋予更好的名称。

关于memory-management - 此代码C++ OpenCV中的内存泄漏在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11151690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com