C ++ / OpenCV IplImage *内存泄漏

时间:2015-11-06 20:28:11

标签: c++ opencv memory-management memory-leaks iplimage

我正在创建一个视觉面板,该面板与一个大的(IplImage *)一致,方法迭代该面板以放置到图形的相对位置更新中。

看起来像这样

visual panel for graphs that are updated each iteration

在代码中,每次迭代,这些“占位符”/“槽”都用对应的图形图像(来自创建图像的绘图对象)更新到相应的位置(创建位置并将其放入相对于地图的地图中)我正在绘制多少图表)

我没有直接绘制到面板上的原因是因为我构建了这个面板,它接受并显示任何IplImage放入“槽”,我稍后会这样做。

我知道如果没有正确发布,IplImages已经过时且内存管理太可怕了,但是,我使用的是一个使用旧opencv的库,所以为了方便一切(因为我试图将所有内容转换为Mat,但是这使事情更复杂),我继续IplImages

我找到了出错的地方,就在这里:

void RsPanel::updateComponents()
{
    for (int i = 0; i < totalspots; i++) {

        CvRect rectangle = cvRect(positionMap[i].x, positionMap[i].y, slotSize.width, slotSize.height);
        cvSetImageROI(window, rectangle);

        img = slots[i].getImage();
        cvCopy(img, window);
        cvResetImageROI(window);
    }


    cvShowImage(name, window);

更准确地说:

img = slots[i].getImage();

从我的理解,内存泄漏是由于没有正确释放以前的“img”,但是当我使用cvReleaseImage发布时,事情就崩溃了(因为从我的理解,它需要在我完成之后完成使用图像。

similar to this

我尝试从插槽中释放“img”和cvCloneImage-ing(槽[i] - > getImage()),但是这给了我同样的内存问题

不释放,在一分钟内,程序累积到1.7GB的RAM,并给我一个内存错误。

我认为,这样做的方式并不是最有效的,但我对内存管理的挣扎(来自Java背景)仍然需要他们的学习时刻

有任何提示可以解决这个问题吗?

提前谢谢!

0 个答案:

没有答案