Выпустить OpenCV Mat из памяти - PullRequest
0 голосов
/ 29 апреля 2019

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

...