从内存释放OpenCV Mat

时间:2019-04-29 14:16:30

标签: opencv memory-leaks out-of-memory

我有来自摄像机的一系列图像(帧)作为输入,存储在std::queue<cv::Mat> buffer容器中。处理完算法后,将弹出一个帧。 我的问题是,内存使用率以某种方式不断增加,但是容器大小buffer.size()最大为1(这意味着该算法正在正确地“消耗”缓冲区并弹出图像)。

我想用一个最小的可复制代码证明我的问题:

线程1 buffer = std::queue<cv::Mat>在线程之间共享的地方

while(true)
{
    mutex->lock();
    buffer->push(cv::Mat::zeros(500, 500, CV_16UC3));
    mutex->unlock()
}

主线程

while(true)
{
    if(!buffer.empty())
    {
        mutex.lock()
        buffer.pop();
        mutex.unlock()
    }
}

此代码导致内存使用量不断增加。 (Ubuntu系统,opencv 3.4.6版本)

我的问题是,如何才能从内存中正确释放cv::Mat

0 个答案:

没有答案