opencv支持ffmpeg,pkg-config的使用注意事项

ffmpeg安装

源码下载 : svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

文件配置 : ./configure --enable-shared --enable-gpl --enable-swscale

安装 :

make 

make install

所有的库文件默认安装在/usr/local/lib 下, 所有的头文件安装在 /usr/local/include/下

测试 : ffplay movie.avi

注意:有些电脑并不能正确编译生成ffplay或者其他程序,找到config.mak文件,去掉CONFIG_FFPLAY=yes前面的注释符号“!”后,再编译

会提示缺少SDL,SDL是Simple DirectMedia Layer(简易直控媒体层)的缩写。它是一个跨平台的多媒体库,以用于直接控制底层的多媒体硬件的接口。

我们先使用命令安装yum install sdl,这个只是安装了部分的库,还会缺少一些,需要手动安装剩下的,主要有一下三个

 SDL_mixer-1.2.12.tar.gz   SDL_image-1.2.11.tar.gz   SDL_rtf-0.1.0.tar.gz 

下载地址:http://www.libsdl.org/projects/打开对应的目录进行下载,若没有在浏览器地址后添加/release就可以找到。

(ubuntu下可以直接使用命令apt-get install libsdl-image1.2-dev完成所有库的安装)

然后依次解压,进入解压的目录./configure    make&&make install


pkg-config工具的使用

有时候会碰到一种情况,库文件明明是安装了,可是编译程序时候,总是提示缺少libXXX.so.2等等之类的错误。这是为什么呢?

这是由于系统在编译程序时,使用默认的目录进行遍历,新安装的库的路径系统暂时找不到,为此有一种工具pkg-config来解决这些种种的问题。它主要的功能有以下几点:

  1. 检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
  2. 获得编译预处理参数,如宏定义,头文件的位置。
  3. 获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
  4. 自动加入所依赖的其它库的设置。
这些都是自动完成的,当安装完库的时候,为了让pkg-config可以得到这些信息,库的作者会提供一个*.pc文件,会自动安装到/usr/local/lib/pkgconfig或者/usr/lib/pkgconfig/,比如opencv.pc(在/usr/local/lib/pkgconfig)的信息如下:

# Package Information for pkg-config

prefix=/usr/local
exec_prefix=${prefix}
libdir=
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 2.4.6.1
Libs:  ${exec_prefix}/lib/libopencv_calib3d.so ${exec_prefix}/lib/libopencv_contrib.so ${exec_prefix}/lib/libopencv_core.so ${exec_prefix}/lib/libopencv_features2d.so ${exec_prefix}/lib/libopencv_flann.so ${exec_prefix}/lib/libopencv_gpu.so ${exec_prefix}/lib/libopencv_highgui.so ${exec_prefix}/lib/libopencv_imgproc.so ${exec_prefix}/lib/libopencv_legacy.so ${exec_prefix}/lib/libopencv_ml.so ${exec_prefix}/lib/libopencv_nonfree.so ${exec_prefix}/lib/libopencv_objdetect.so ${exec_prefix}/lib/libopencv_photo.so ${exec_prefix}/lib/libopencv_stitching.so ${exec_prefix}/lib/libopencv_superres.so ${exec_prefix}/lib/libopencv_ts.so ${exec_prefix}/lib/libopencv_video.so ${exec_prefix}/lib/libopencv_videostab.so
Cflags: -I${includedir_old} -I${includedir_new}
~                                                   
为了让pkgconfig可以找到你的pc文件,你要把pc文件所在的路径,设置在环境变量 PKG_CONFIG_PATH 里具体操作可以这样:

export  PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/库文件目录/pkgconfig
如果觉得麻烦,可以将以上这条命令写入一个文件,比如opencv.pkg  然后使用命令source  opencv.pkg即可。

安装完ffmpeg后,为了使opencv支持ffmpeg,我们需要把有关ffmpeg的.pc文件的路径导入PKG_CONFIG_PATH,由于是默认安装,执行

export  PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig即可


然后重新编译、安装opencv,cmake生成makefile文件的过程中出现如下的信息,就支持ffmpeg了

opencv支持ffmpeg,pkg-config的使用注意事项_第1张图片

使用opencv时,需要注意pkg-config的使用,具体的使用方法如下:

 
  

pkg-config 库的名称(如:opencv --libs

pkg-config 库的名称(如:opencv) --cflags

pkg-config 库的名称(如:opencv --libs --cflags

编译opencv程序的时候必须添加:

`pkg-config opencv --cflags --libs`参数
如本博客前面出现的opencv测试程序都需要添加这个参数
可以采用编写makefile文件的方式避免每次都写这个参数,每次编译程序时候只需要改变源程序即可,例程如下:

CC=g++
INCLUDE=$(shell pkg-config opencv --cflags)
LIBS=$(shell pkg-config opencv --libs)
SOURCE=sift.c
BIN=sift
$(BIN):$(SOURCE)
        $(CC) $(INCLUDE) $(LIBS) $(SOURCE) -o $(BIN)
clean:
        rm -rf $(BIN)
~                       
注意此makefile文件中,使用pkg-config时候的写法!!!


你可能感兴趣的:(opencv学习)