opencv函数中的内存泄漏

时间:2011-10-31 02:28:43

标签: c++ opencv

我一直注意到我的程序的内存使用量有时会毫无意义地增加。特别是当我使用cvWaitKey(0)时,我的程序往往会在10秒钟内将内存使用量调到很大。

是否有解决此问题,或者这是一个OpenCv错误?

我有一个名为Show_Image的简单函数,我们设置了一个回调函数来获取像素值:

void Show_Image(IplImage *img)
{
    cvNamedWindow("IMAGE_WINDOW", CV_WINDOW_AUTOSIZE); 
    cvSetMouseCallback("IMAGE_WINDOW", GETPIXEL , (void*)img);
    cvShowImage("IMAGE_WINDOW", img );
    cvWaitKey(0);
    cvDestroyWindow("IMAGE_WINDOW");
}

1 个答案:

答案 0 :(得分:2)

似乎没有错误,也没有解决方法。当您调用cvWaitkey()时,该函数处理所有Windows消息队列。而且因为你有一个鼠标回调,它总是处理那里的东西。这与系统显示进程的实际内存使用情况的弱能力相结合,可能会给您一个错误的泄漏警报。

但是,要查找问题的根源,请在程序中添加一行代码,如下所示

getchar();

等待进程内存增加,然后按任意键退出cvWaitKey()中的消息循环,然后在getchar()函数中等待一分钟。如果内存在那一分钟内没有下降,那可能是泄漏。随意填写openCV错误跟踪器https://code.ros.org/trac/opencv/wiki

中的票证

还尝试使用不同的方法来衡量内存的增加: How to measure actual memory usage of an application or process? 要么 Tracking CPU and Memory usage per process