Утечка памяти при получении кадров видео с EmguCV, NET - PullRequest
0 голосов
/ 05 марта 2020

Привет. Я пытаюсь написать функцию для извлечения всех кадров из видео с использованием EmguCV in. NET. Я делаю это с помощью класса Emgu Capture для QueryFrame () видео, пока эта функция не возвращает ноль. Мне нужно сохранить эти захваченные кадры на диск во время процесса. Но у меня где-то должна быть утечка памяти, потому что видео среднего размера выдает System.OutOfMemoryException

Код здесь:

private void GetFramesFromVideo(string filename)
{
    Capture capture = new Capture(filename);
    bool capturing = true; //loop condition
    int count = 0;

    while (capturing) {
        Mat mat = capture.QueryFrame();//take frame from video

        if (mat != null) //save to disk if not null
        {
            string savePath = Globals.TempFolderPath +
                String.Format("temp-video-frame{0:000000}.jpg", count++); ; 


            Bitmap frame = mat.ToImage<Bgr, Byte>().ToBitmap(); //EXCEPTION THROWN HERE
            frame.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);  
            frame.Dispose();
            mat.Dispose();

        }
        else //eof
        {
            capturing = false;
        }

    }

    ShowDebugMessage(String.Format("Extracted {0} images from video", count));

}

Эта функция работает, она получает все кадры из видео , Я просто не могу понять, в чем проблема с памятью. Строка Bitmap frame = mat.ToImage<Bgr, Byte>().ToBitmap(); - это то, что вызывает исключение, поэтому я попытался избавиться от двух вещей, используемых в этой строке, но это не решило проблему. Обратите внимание, что я использую EmguCV 3.0.1 по глупым причинам, которые мешают обновлению.

...