我一直注意到我的程序的内存使用量有时会毫无意义地增加。特别是当我使用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");
}
答案 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