近日,在项目中需要使用opencv,因此在linux系统中安装opencv,但是经过测试发现调用opencv中的函数cvCreateFileCapture来读取视频一直没有成功,通过搜索发现在linux系统下,读取视频文件需要关联ffmpeg,然而安装了ffmpeg还是不能成功读取视频。幸运的是,通过反复不断的卸载重装,终于成功了。虽然这是一个很小的问题,也可能大家遇到的问题不一样,但是还是要记录下来,也方便今后遇到同样问题时可以快速找到解决方法。
我安装的ffmpeg版本是2.1.8,opencv的版本是2.4.9,都不是最新的版本,但基本能满足项目的使用,配置安装主要分三步来完成(以下的执行步骤均是在root用户模式下操作):
一、安装ffmpeg,这个比较简单,首先执行./configure --disable-yasm --enbale-shared --prefix=/usr/local/ffmpeg,由于系统中没有安装yasm,貌似也不需要安装,所以就选择了disable,--enbale-shared,编译生成动态库文件,--prefix设置安装路径;然后执行make操作;最后make install; 这样安装好ffmpeg了,需要注意的是,这样并没有安装ffplay,也可以在/usr/local/ffmpeg/bin中发现并没有ffplay这个执行文件。最后是测试ffmpeg是否成功安装,可以在vim /etc/profile 加上export FFMPEG_HOME=/usr/local/ffmpeg;export PATH=$FFMPEG_HOME/bin:$PATH这两句,然后执行source /etc/profile。这样执行命令ffmpeg -version如果显示版本信息,就证明ffmpeg已经成功安装了。安装成功后,在/etc/profile中添加动态库路径LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
二、安装pkg_config,这个是必须要安装的,不然安装opencv的时候就无法检测到ffmpeg工程中的类似libavcodec.pc等的pc文件,那么也就无法正常使用opencv了。安装pkgconfig后,需要设置PKG_CONFIG_PATH,我的ffmepg安装在/usr/local/ffmepg中,.pc文件在/usr/local/ffmepg/lib/pkgconfig目录下,需要修改/etc/profile,添加内容:export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/ffmpeg/lib/pkgconfig:/usr/loal/lib;
三、安装opencv,安装opencv前提是系统中已经安装了cmake,如果没有需要先安装cmake。首先进入opencv目录,mkdir release; 然后执行cmake -D CMAKE_BUILD_TYPE= RELEASE -D CMAKE_INSTALL_PATH=/usr/local ..需要注意的是后面的..是必须加上的,不然无法执行该命令,最后看屏幕上出现的提示信息,主要是观察是否支持ffmpeg, 提示信息中如果有FFMPEG: YES, codec:YES等信息,则说明opencv已经成功关联ffmpeg, 如果提示no,则很有可能找不到ffmpeg的pc文件,解决方法可以看最后的ps。此外还需要注意的是是否出现头文件找不到的错误,如Looking for libavformat/avformat.h - found,我的问题主要是出现在这里,导致opencv一直无法成功读取视频文件操作,解决方法,将/usr/local/ffmpeg/include目录下的文件复制一份到/usr/local/include目录下: cp -r libav* libsw* /usr/local/include
至此,opencv已经成功安装了~~~~,希望能帮助到遇到同样问题的小伙伴,很少写博客,内容和排版若有问题,请多包涵
PS:如果这样子opencv仍然无法执行读取视频操作,需要检查第二步,很有可能opencv的安装无法检测到ffmeg的pc文件,或者是PKG_CONFIG_PATH路径的设置没有起效。解决方法:将/usr/local/ffmpeg/lib/pkgconfig目录下的pc文件复制到/usr/local/lib/pkgconfig目录下。