我注意到我的程序的内存使用量有时会毫无意义地增加。特别是当我使用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");
}
似乎没有错误,也没有解决方法。当调用cvWaitkey()时,该函数处理所有的Windows消息队列。因为你有一个鼠标回调,所以它总是在那里处理一些东西。再加上系统显示进程实际内存使用情况的能力较弱,可能会给您发出错误的泄漏警报。
但是,要找到问题的根源,请在程序中添加一行代码,如下所示
getchar();
等待进程内存增加,然后在cvWaitKey()中按任意键退出消息循环,然后在getchar()函数中等待一分钟。如果在那一分钟内内存没有下降,则可能是泄漏。请随时在 openCV bug tracker 中填写一张票https://code.ros.org/trac/opencv/wiki https://code.ros.org/trac/opencv/wiki
还可以尝试不同的方法来测量内存的增加:如何测量应用程序或进程的实际内存使用情况? https://stackoverflow.com/questions/131303/linux-how-to-measure-actual-memory-usage-of-an-application-or-process
or
跟踪每个进程的 CPU 和内存使用情况 https://stackoverflow.com/questions/69332/tracking-cpu-and-memory-usage-per-process
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)