笔记:最近使用 OpenCV 碰到的三个问题
文章目录
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>
文章作者 cookwhy
上次更新 2011-08-02