分享

在linux中安装opencv 2.1-正常使用视频文件

 寒山月 2011-07-26
关于opencv的安装,相关的教程有很多,但大部分都比较简略,以至于即便成功安装后,在使用中仍有很多问题,如cvCreateFileCapture函数始终返回空指针,本文集中讲述如何正确配置,以使得opencv可以处理常用视频文件。

简介:
Opencv 库使用多种其它开源库作为工具和扩展,在linux下,一般采取源代码编译的方式安装opencv,这就需要预先安装所需的工具库,例如ffmpeg 提供各种视频编解码, Intel TBB 提供并行运算功能等等。但这些库并不是必须的,如果没有安装,Opencv一样可以正常编译并安装,这就导致了使用中的一些奇怪的问题,例如无法读写视频。其实opencv可以使用原始格式的视频文件,但这种文件格式极大,没有实际价值,要想使用常用的压缩格式视频,例如mpeg 4 则必须安装ffmpeg库。

过程:
一 安装ffmpeg
1、删除旧版ffmpeg:如果系统曾经安装过旧版ffmpeg,一定要删除,否则与新版有冲突 $ yum remove faad2 faac
2、下载ffmpeg并解压到一个临时文件夹 (自己找吧)
3、进入上述文件夹中,执行配置脚本
./configure –enable-shared –enable-gpl --enable-swscale
编译动态链接库,允许按gpl的方式使用库,
编译swscale库(最新版ffmpeg,这个是默认的)
4、make && make install
所有的库文件默认安装在/usr/local/lib 下, 所有的头文件安装在 /usr/local/include/lib…下,也可以改变默认安装位置(在configure 最后添加 –prefix=DIR)。
验证下 :ffplay anyvideofile

二 安装pkg-config
pkg-config 是一个库文件安装信息管理工具,它可以返回已安装的库文件及其相关头文件的位置信息。安装这个极容易,自己下载安装把。
pkg-config 通过各个库文件的.pc 文件识别已安装的库文件的信息,这些.pc文件是由各库的安装程序自己生成的,例如ffmpeg 安装程序会在/usr/local/lib/pkgconfig目录下提供libavcodec.pc libswscale.pc 等5个.pc文件,分别对应安装的五个库文件。
但pkg-confg默认只搜索/usr/lib/pkgconfig目录,去寻找.pc文件,这里需要添加一个环境变量 PKG_CONFIG_PATH=/usr/local/lib/pkgconfig,使得pkg-config可以找到ffmpeg的安装信息。

三 安装cmake
cmake 是一个跨平台makefile生成工具,是编译新版opencv所必须的工具。
直接下载安装cmake到一个合适的位置,并将cmake安装目录下的bin目录加入PATH环境变量,cmake的使用详见下述说明。

四 安装opencv
1、下载最新版opencv源代码 for linux.
2、在源代码目录下 mkdir release && cd release
3、cmake ../ (重点)
使用cmake 生成编译opecv的Makefile 文件, ../ 是opencv的源代码目录,里面包含了预置的cmake 配置文件CmakeLists.txt。
这里的输出,会显示默认配置下,各模块的检测情况,重点是opencv所需工具库是否被检测到,例如视频编解码库、TBB库等。
查看CmakeLists.txt文件可知,cmake使用pkg-config获取所需的库文件的信息,这就是为什么一定要安装pkg-config的原因。
如果你看到FFMPEG及其下各子项的值为1,ok,检测到了,如果为0,核对1、2两步骤,看是否成功安装了ffmpeg,以及pkg-config是否可以检测到ffmpeg:
使用 pkg-config –list-all | grep libavcodec 。
4、 cmkae-gui ../
若你想改变opencv的默认编译模式,用cmake的图形模式可以编辑一大堆的编译参数,例如是否支持IPP、TBB等等,这里比较讨厌的是,图形模式下,你看不到选择的模块是否被正确检测到,要再运行 cmake ../ 查看。
5、 make && make install 默认 opencv将被安装在 /usr/local/ 下。
6、 编辑环境变量 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 以使得系统可以找到opencv的动态链接库。

到这里,opencv安装完毕,并可读写几乎全部常见视频文件,你可以使用g++直接编译你的例程,如果你的pkg-config配置正确,以下指令可以运行 :
g++ -o my_example my_example.cpp `pkg-config opencv --cflags --libs`
pkg-config opencv --cflags –libs 将返回opencv的头文件和库文件的编译参数。

注 :
1、 如果你使用本文所述方法编译 opencv 1, 则必须改动 opencv的源代码,以使得opencv可以找到ffmpeg的头文件,老版ffmpeg的头文件放置位置与新版不同,opencv 1 找不到相关文件。 Opencv 2.1 做了处理,可以找到任意版本的ffmpeg头文件。
2、 如果你使用的fedora系统,则selinux security 可能阻止你访问ffmpeg的动态库,以下指令解决:
$ chcon -t textrel_shlib_t '/usr/lib/libavutil.so.50'
$ chcon -t textrel_shlib_t '/usr/lib/libavcodec.so.52'
$ chcon -t textrel_shlib_t '/usr/lib/libavformat.so.52'
$ chcon -t textrel_shlib_t '/usr/lib/libswscale.so.0'
注意,根据你安装的ffmpeg版本的不同,最后的数字会有所不同,到/usr/local/lib中查看具体的文件名。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多