У меня есть последовательность изображений (кадров) с камеры в качестве входных данных, которая хранится в контейнере 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
из памяти.