opencv - 从内存中释放 OpenCV Mat
问题描述
我有一个来自相机的图像(帧)序列作为输入,它存储在一个std::queue<cv::Mat> buffer
容器中。在算法处理完一个帧之后,它就会被弹出。我的问题是内存使用量不断上升,但是容器大小buffer.size()
最大为 1(这意味着算法正在正确地“吃掉”缓冲区并弹出图像)。
我想用 最少的可重现代码来证明我的问题:
thread1: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
从内存中释放 a 。
解决方案
推荐阅读
- matrix-multiplication - 在另一个四元数的框架中旋转四元数?
- python - LOGIN_REDIRECT_URL
- android - 操作菜单图标存在时Android CollapsingToolbarLayout折叠标题不居中
- python - 错误:NotImplementedError:这是语音识别中的一个抽象类
- reactjs - 光滑的滑块 1 图像向下移动
- python - 自动将图像添加到 PDF 文件中的相应页面,然后将 PDF 保存为新文件 Python
- sql - 内部连接选择查询中的重复列
- python - 在 Pandas 的列中添加嵌套字典
- coq - Coq:无法猜测修复的递减参数
- java - 如何使用 BFS 算法解决给定的任务?