0

Я могу сохранить только 1 кадр видео с моим текущим кодом. но мне нужно сохранить видео в течение более длительного периода времени. Может кто-то помочь мне с этим?Сохранение видео с помощью EMGU

public void ProcessFrame(object sender, EventArgs e) 
    { 
      frame = _capture.QueryFrame(); 
      imageBox1.Image = frame; 
      VideoW = new VideoWriter(@"temp.avi", 
            CvInvoke.CV_FOURCC('M', 'P', '4', '2'), 
            (Convert.ToInt32(upDownFPS.Value)), 
            frame.Width, 
            frame.Height, 
            true); 
      VideoW.WriteFrame(frame); 
    } 

ответ

3

Существует проблема с кодом, насколько я могу видеть, что это кадр процесс присоединен к application.idle событию.

Поэтому, когда приложение простаивает, эта функция вызывается и кадр захватывается из источника видео.

Теперь, если мы рассмотрим вашу функцию ProcessFrame, она просто повторно инициализирует VideoWriter и записывает кадр (текущий кадр) в видео, и именно поэтому вы получаете только один кадр в выходном видео.

Так в идеале ваш ProcessFrame должен выглядеть что-то вроде этого

public void ProcessFrame(object sender, EventArgs e) 
    { 
      frame = _capture.QueryFrame(); 
      imageBox1.Image = frame; 

      VideoW.WriteFrame(frame); 
    } 

и инициализация переменной VideoW т.е. этот исходный код.

VideoW = new VideoWriter(@"temp.avi", 
            CvInvoke.CV_FOURCC('M', 'P', '4', '2'), 
            (Convert.ToInt32(upDownFPS.Value)), 
            frame.Width, 
            frame.Height, 
            true); 

Он должен находиться за пределами идеально в constructor или где вы initilized другие переменные (_capture переменные и т.д.)

проверки this tutorial больше о чтении и записи видео файлов в Emgucv.

Надеясь, что это поможет.

+1

Спасибо! Это действительно помогло мне получить общее представление о том, как отформатировать коды = D – user3171486

Смежные вопросы