【问题标题】:Saving video with EMGU使用 EMGU 保存视频
【发布时间】:2014-01-23 03:32:08
【问题描述】:

我目前的代码只能保存 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);
    }

【问题讨论】:

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


    【解决方案1】:

    据我所知,您的代码存在问题,即进程框架附加到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 中读写视频文件的更多信息。

    希望这会有所帮助。

    【讨论】:

    • 谢谢!它确实帮助我大致了解了如何格式化代码 =D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2012-08-04
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    相关资源
    最近更新 更多