Привет. Я пытаюсь написать функцию для извлечения всех кадров из видео с использованием 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 по глупым причинам, которые мешают обновлению.