Posted on 02-08-2011
Filed Under (技术) by waterlin

OpenCV2.1 生成视频选择编码的 bug

最近使用 OpenCV2.1 来生成视频,在 Windows 下碰到这样的问题:不管我用什么样的编码,都没有办法直接生成视频,并且会导致程序崩溃。代码如下:

_writer = cvCreateVideoWriter( video.c_str(),
                               CV_FOURCC('X','V','I','D'),
                               _fps,
                               cvSize(frameW,frameH),
                               isColor );

但是,如果我把编码换上 -1 选项来手工选取视频格式,则能顺利生成视频。代码如下:

_writer = cvCreateVideoWriter( video.c_str(),
                               -1,
                               _fps,
                               cvSize(frameW,frameH),
                               isColor );

这个应该是 OpenCV2.1 里的一个 Bug,换成 OpenCV2.2 就没有这个问题了。

OpenCV2.2 的 Visual Studio 2008 问题

官方的 OpenCV2.2 是在 Visual Studio 2010 下编译的二进制包,所以,当你把 OpenCV2.2 嵌入到 Visual Studio 2008 里,可以正常编译相关的代码,但是一运行,一定会提示找不到动态链接库 msvcp100d.dll 或是 msvcr100d.dll

这个时候,你可以把这两个 Visual Studio 2010 的动态链接库拷贝到编译好的可执行文件目录里。但是,最好的方式,是你在 Visual Studio 2008 里重新编译一下 OpenCV2.2

OpenCV 读取视频帧与 DirectShow 读取视频的步调不一致

有一些视频,我用 OpenCV 跳转到指定的时间,和用 DirectShow 跳转到视频指定的时间,理论上来说,应该是一样的。可是,在我这里,偏偏就出现了跳转视频位置不同的情况。而且,原始视频越长,这种误差越大。

是什么原因呢?

仔细研究了一下,我用 OpenCV 读取参数,会显示是 29 帧/秒,大约有 276168 帧;但是用 DirectShow 解码后显示为 30 帧/秒,计算后约为 268946 帧。

解码后的度量时间标准不同,也就导致了上述误差。但是,真实的原因是什么呢?

© 2011, 浏忙大爆炸. All rights reserved.
除非注明,浏忙大爆炸文章均为原创,转载请以链接形式标明本文地址。

(0) Comments    (861) Views    Read More   
Post a Comment
Name:
Email:
Website:
Comments: