使用EMGU保存视频

时间:2014-01-23 03:32:08

标签: c# image-processing video-capture video-processing emgucv

我只能使用当前代码保存1帧视频。但我需要将视频保存更长时间。有人可以帮我弄这个吗?

 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);
    }

1 个答案:

答案 0 :(得分:4)

就我所见,您的代码存在问题,即代理框架已附加到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之外,或者你已经启动了其他变量(_capture变量等)。

检查this tutorial,了解有关在Emgucv中阅读和编写视频文件的更多信息。

希望这有帮助。