首页 > 解决方案 > 从内存中释放 OpenCV Mat

问题描述

我有一个来自相机的图像(帧)序列作为输入,它存储在一个std::queue<cv::Mat> buffer容器中。在算法处理完一个帧之后,它就会被弹出。我的问题是内存使用量不断上升,但是容器大小buffer.size()最大为 1(这意味着算法正在正确地“吃掉”缓冲区并弹出图像)。

我想用 最少的可重现代码来证明我的问题:

thread1buffer = 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从内存中释放 a 。

标签: opencvmemory-leaksout-of-memory

解决方案


推荐阅读