EMGU CV视频摄像师无法制作视频

时间:2015-07-04 05:53:42

标签: c# opencv bitmap emgucv image-compression

我试图使用Emgu CV VideoWriter捕获视频,但它显示:

  

无法创建VideoWriter。确保您拥有特定的编解码器   安装

我该如何处理?
这就是我的代码:/

Bitmap back = new Bitmap("jpg image path");
Image<Bgr, Byte> bg;
bg = new Image(Bgr, byte)(back);
vw = new VideoWriter("c://work//test1.mp4",CvInvoke.CV_FOURCC('M','S','V','C'), 17, 640, 480, true);

它适用于.avi扩展,但尺寸非常大,只有几秒钟,所以我想更多地压缩它。请建议代码/库的任何变通方法或更改。

4 个答案:

答案 0 :(得分:1)

对我来说,问题在于fileName参数期望反斜杠,但是我使用的是正斜杠。例如,c://work//test1.mp4引发了原始海报描述的异常,但是c:\work\test1.mp4起作用。

答案 1 :(得分:0)

在我的usb网络摄像头中,我使用width = 352和height = 288(运行良好没有错误),但是 如果我更改宽度= 460和高度= 480,我会收到错误消息&#34;无法写入视频文件&#34;

所以,问题是宽度和高度参数错误

您可以使用frame.Height使用frame.Width和height获取宽度 你必须像这样声明帧变量。

Dim frame As Emgu.CV.Image(Of Emgu.CV.Structure.Bgr, Byte) = Capturez.QueryFrame

答案 2 :(得分:0)

我很幸运使用XVID进行我的FOURCC设置。它为我的应用程序提供了最佳的压缩效果。

我注意到我正在使用的Emgu版本使用不同的机制来指定VideoWriter中的FOURCC值。

我用来获取XVID编码器的电话是:

    VideoWriter video = new VideoWriter(saveFilename, VideoWriter.Fourcc('X', 'V', 'I', 'D'), fps, videoFrameSize, true);

关键是发现VideoWriter本身有一种指定Fourcc设置的方法。

VideoWriter.Fourcc('X', 'V', 'I', 'D')

答案 3 :(得分:0)

我有一个类似的问题,问题是帧只能是Bgr格式。 只需使用格式转换,例如:

Image<Emgu.CV.Structure.Bgr, byte> frameBgr = frameBgra.Convert<Emgu.CV.Structure.Bgr, byte>();

可以解决VideoWriter的问题。