我有来自摄像机的一系列图像(帧)作为输入,存储在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
。