天天看点

OpenCV1.0版本中cvCaptureFromFile()函数无法读取.avi文件的解决办法

其实我是被这个问题困扰好久以后,在之前大牛的指点下搞定的。所以,首先要谢谢之前的分享的高手。

具体情况如下:

  运行一个demo程序,视频跟踪的,使用提供的视频文件没有问题。可以很好的读入,程序运行正常。但是换成自己的文件后,就不行了。提示capture =cvCaptureFromFile() 中指针为空。视频文件没有加载上去。

  上网搜了一下,有人说这是因为cvCaptureFromFile()函数原型有关。手册上讲,其中的参数必须是:const char * filename.存在一个字符串转换的问题。但是思考后,感觉不对。因为要是字符窜转换的问题话,那应该所有格式一样的视频文件都不能读取啊,为什么有的可以,有的不行呢?

  再查之,得到一种解释,说是这个和视频文件的编码格式有关。虽然后缀名同为avi但是各自的编码方式不一样。opencv1.0中支持多个版本的编码方式。论坛上老师说Xvid编码的文件一定能够打开。于是找到两个软件。一个是GSpot一个分析编码方式的软件,这个很好用。火眼金睛!一下子就可以分析出视频文件时什么编码方式的。

  另外就要找一个编码转换器软件。这个不太好找。找了几个,要么是要收费,要么就是转换后,还是不能work.论坛上推荐MediaCoder。

  下下来之后,要设置好“视频”中选择格式Xvid,编码器也选择Xvid,容器选择AVI。这一点和论坛上的那个帖子不一样。

http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=4725&p=17574&hilit=cvCaptureFromFile#p17574

把原帖贴出来,大家自己参考。

avi