我只能使用当前代码保存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);
}
答案 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中阅读和编写视频文件的更多信息。
希望这有帮助。