OpenCV函数中的内存泄漏问题

3

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

这个问题有解决方法吗?还是这是一个OpenCv的bug?

我有一个简单的函数叫做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");
}

请发布一个最小完整程序,以演示问题(http://sscce.org)。您当前的描述过于模糊,只能通过猜测和先前的经验来进行调查。 - Mankarse
@Mankarse - 发布了相关代码... 请检查。 - Expert Novice
1个回答

2
似乎没有错误也没有解决方法。当您调用cvWaitkey()时,该函数会处理所有窗口消息队列。由于您有一个鼠标回调,在那里它总是在处理一些东西。这与系统显示进程实际内存使用情况的能力不足相结合,可能会给您带来错误的泄漏警报。
但是,为了查找问题的源头,请在程序中添加一行代码,如下所示。
getchar();

等待进程内存增加,然后按任意键退出cvWaitKey()中的消息循环,并在getchar()函数中等待一分钟。如果内存在那一分钟内没有下降,则可能存在泄漏。可以随时在openCV错误跟踪器https://code.ros.org/trac/opencv/wiki中提交工单。
还可以尝试不同的方法来测量内存增加: 如何测量应用程序或进程的实际内存使用情况?跟踪每个进程的CPU和内存使用情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接