Opencv 如何选择完整帧(未压缩)作为VideoWriter的编解码器
我想将设备中未压缩的帧存储为视频,但我需要知道如何选择“完整帧(未压缩)”作为VideoWriter的编解码器(在emgu aka openCV中) 当我像这样通过-1时,我可以从下拉菜单中选择它Opencv 如何选择完整帧(未压缩)作为VideoWriter的编解码器,opencv,kinect,video-capture,emgucv,codec,Opencv,Kinect,Video Capture,Emgucv,Codec,我想将设备中未压缩的帧存储为视频,但我需要知道如何选择“完整帧(未压缩)”作为VideoWriter的编解码器(在emgu aka openCV中) 当我像这样通过-1时,我可以从下拉菜单中选择它 VideoWriter myVideoWriter = new VideoWriter ("myVieoColor.avi", -1 , 15, videoSize, true); 但是我想自动选择全帧(未压缩)编解码器。 例如,我知道我可以通过以下方式选择Lagarith无损视频编解码器: Vid
VideoWriter myVideoWriter = new VideoWriter ("myVieoColor.avi", -1 , 15, videoSize, true);
但是我想自动选择全帧(未压缩)编解码器。
例如,我知道我可以通过以下方式选择Lagarith无损视频编解码器:
VideoWriter myVideoWriter = new VideoWriter ("myVieoColor.avi", Emgu.CV.VideoWriter.Fourcc('L','A','G','S') , 15, videoSize, true);
但是我不知道我需要使用哪种fourcc
也许有人可以帮我解决问题,如果我们在打开此编解码器选择对话框时进入调试器,我们可以看到这是to
AVISaveOptions(…)
的结果。因此,找到所选内容的一种方法是在say上设置断点并检查fourcc
的内容
但是,还有更简单的方法:
cv::VideoCapture
打开foo.avicv::VideoCapture
实例获取CAP\u PROP\u FOURCC
//record the Videofile with VideoWriter to "myVideoColor.avi"
capture = new Capture("myVieoColor.avi");
System.Diagnostics.Debug.WriteLine(CvInvoke.cveVideoCaptureGet(capture, Emgu.CV.CvEnum.CapProp.FourCC));
到目前为止还不错。
当我使用LAGS作为编解码器时,一切正常,我得到1397178700,所以我可以用这个值调用构造函数
VideoWriter myVideoWriter = new VideoWriter ("myVieoColor.avi", 1397178700 , 15, videoSize, true);
//works great with 1397178700 == LAGS codec
但当我通过-1并从下拉菜单中选择uncompressed时,它会返回0作为fourCC编解码器值,但当使用0作为构造函数参数时,它不会记录并打印808596553作为所用编解码器的值
VideoWriter myVideoWriter = new VideoWriter ("myVieoColor.avi", 0 , 15, videoSize, true);
//dont work and CapProb.FourCC returns 808596553
从drop中选择Lagarith无损编解码器,我得到了1397178700,因为它应该也将工作。
有什么想法吗
PS:再次感谢您到目前为止在Opencv参考资料中对Dan Mašek的帮助
小贴士:
->对于一些后端,fourcc=-1会从系统中弹出“编解码器选择”对话框
->若要保存图像序列,请使用正确的文件名(例如img_u%02d.jpg)和fourcc=0或fps=0。使用未压缩的图像格式(例如img_%02d.BMP)保存原始帧
->大多数编解码器都是有损的。如果您想要无损视频文件,您需要使用无损编解码器(例如FFMPEG FFV1、Huffman HFYU、Lagarith LAGS等)
->如果启用了FFMPEG,则可以使用codec=0;fps=0;创建未压缩(原始)视频文件
请在回答中添加C样本。
FOURCC is 'DIB '
//record the Videofile with VideoWriter to "myVideoColor.avi"
capture = new Capture("myVieoColor.avi");
System.Diagnostics.Debug.WriteLine(CvInvoke.cveVideoCaptureGet(capture, Emgu.CV.CvEnum.CapProp.FourCC));
VideoWriter myVideoWriter = new VideoWriter ("myVieoColor.avi", 1397178700 , 15, videoSize, true);
//works great with 1397178700 == LAGS codec
VideoWriter myVideoWriter = new VideoWriter ("myVieoColor.avi", 0 , 15, videoSize, true);
//dont work and CapProb.FourCC returns 808596553