cvCreateFileCapture函数打开视频文件失败

来源:互联网 发布:mitek木结构设计软件 编辑:程序博客网 时间:2024/05/14 16:49

我的系统仍然是Ubuntu 12.04LTS(32bit)

RT 在敲OpenCV第二个例程的时候 (代码如下)

#include <highgui.h>int main(int argc, char **argv){cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);CvCapture * capture = cvCreateFileCapture("1.avi");IplImage * frame;while(1){frame = cvQueryFrame(capture);if(!frame) break;cvShowImage("Example2",frame);char c = cvWaitKey(33);if(c == 27) break;}cvReleaseCapture(& capture);cvDestroyWindow ("Example2");}
这段代码的功能就是用OpenCV来一帧一帧地处理 1.avi(例程中那个汽车行驶的视频)并在 Example2窗口中显示

这段代码编译正确但却不能执行的原因就是 cvCreateFIleCapture 此函数一直返回空的指针NULL 所以在执行到 if(!frame)的时候 直接break掉循环  导致不能正常加载视频文件

根本原因:Opencv库使用多种其它开源库作为工具和扩展,在linux下,一般采取源代码编译的方式安装opencv,这就需要预先安装所需的工具库,

例如ffmpeg 提供各种视频编解码, Intel TBB 提供并行运算功能等等。

但这些库并不是必须的,如果没有安装,OpenCV一样可以正常编译并安装,这就导致了使用中的一些奇怪的问题,例如无法读写视频。


解决办法:网上搜了一大堆帖子 终于找到一个最靠谱的  具体如下:

步骤1:之前我们解压OpenCV的源码包后 ,得到这个文件夹 OpenCV-2.4.3   ,cd进去(命令 cd OpenCV-2.4.3)ls 一下(命令 ls)发现 里面 有一个文件叫做 CMakeLists.txt ,

 执行如下命令 (cmake   CMakeLists.txt) 一下 ,目的是查看一下 我们的OpenCV 是否支持 ffmpeg  

执行命令后  找到 ffmpeg 那一行  发现 我们的  FFMPEG  竟然是no   这就是问题的关键所在了  那么我们怎么把它变成 YES 呢?

步骤2:很简单,手动安装ffmpeg  ,去这里http://www.ffmpeg.org/download.html下一个 压缩包 ,鼠标往下拉 ,选一个你喜欢的版本开始下载(点击Download gzip tarball)这个选项 下载后解压

步骤3:cd 进去解压后的文件夹 执行make命令, 耐心等一段时间后  再执行 sudo make install 安装到本地环境中  安装好后 可以  执行命令 (ffplay 1.avi)如果成功显示视频的话 恭喜你 你的ffmpeg已经安装完毕

步骤4:ffpeg安好了 下一步就是要重新编译我们的OpenCV  进入 OpenCV源代码目录  重新cmake一下  这个时候再 cmake   CMakeLists.txt 一下 就会发现 原本的 FFMPEG 那一行 变成 YES 了!!

然后 执行命令 sudo make install 安装到本地环境下  


重新编译例程 就会发现可以运行了!!!

一切OK!!

欢迎支持我的点点和豆瓣:

http://www.diandian.com/dianlog/messiandzcy

http://www.douban.com/people/zhangchengyu/























原创粉丝点击