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

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

<pre>

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

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

<pre>

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

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

OpenCV2.2 的 Visual Studio 2008 问题

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

<p>
  这个时候,你可以把这两个 Visual Studio 2010 的动态链接库拷贝到编译好的可执行文件目录里。但是,最好的方式,是你<a href="http://blog.waterlin.org/articles/using-opencv-in-visual-studio-2005.html">在 Visual Studio 2008 里重新编译一下 OpenCV2.2</a>。
</p></p>

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

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

<p>
  是什么原因呢?
</p>

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

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