将要使用的版本opencv版本:2.3.1a
计算机环境:Fedora 14, Gcc 4.5.1, cmake
2.8.4。为了显示界面,貌似还需要gtk2-devel。如果需要进行视频处理,还需要安装ffmpeg-devel。否则基本无法读取视频。如果要
处理图片,还需要安装相应的库:openjpeg-devel和libpng-devel。
默认情况下,fedora并没有安装这些库,所以需要先安装它们。
1
2
|
$ su # yum install cmake gtk2-devel ffmpeg-devel openjpeg-devel libpng-devel -y |
在安装完前置条件之后,现在开始安装opencv(下载地址).
下载完之后进行解压,并假设解压路径为OPENCV_ROOT。在$OPENCV_ROOT里创建release文件夹,用于存放编译后的文件。
1
2
3
|
$ tar xvf OpenCV-2.3.1a. tar .bz2 $ cd OpenCV-2.3.1a $ mkdir release |
接着可以在release文件夹里创建Makefile
1
2
|
$ cd release $ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX= /usr/local -D BUILD_PYTHON_SUPPORT=ON .. |
其中选项BUILD_PYTHON_SUPPORT=ON表示添加Python支持。而每个选项前要添加-D参数。opencv还可以添加CUDA
和TBB支持。想要在编译中添加相应的支持。只需添加编译选项 -D WITH_CUDA=ON或 -D WITH_TBB=ON。
默认情况下,只要安装了CUDA 4.0版本,opencv就会自动添加CUDA支持。但出于种种原因而不想添加CUDA支持,只需添加编译选项 -D WITH_CUDA=OFF即可。
生成Makefile之后就可以开始编译。
1
2
3
|
$ make -j4 $ su # make install |
其中make -j4表示启用4个核进行编译。如果你的计算机是双核的,则应该使用-j2.
安装完之后,需要设置库路径。
1
2
|
$ su # vi /etc/ld.so.conf.d/opencv.conf |
输入/usr/local/lib,并保存退出。或者可以在/etc/profile中添加环境变量
1
2
|
LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /usr/local/lib export LD_LIBRARY_PATH |
添加完库路径之后,还需要添加环境变量。
1
2
|
PKG_CONFIG_PATH= /usr/local/lib/pkgconfig :$PKG_CONFIG_PATH export PKG_CONFIG_PATH |
然后更新库缓存和环境变量。
1
2
|
# ldconfig $ source /etc/profile |
测试安装是否成功
1
2
|
$ cd $OPENCV_ROOT /samples/c $ sh build_all.sh |
编译好之后直接试运行
1
|
$ . /facedetect --cascade= "/usr/local/share/$OPENCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg |
其中$OPENCV表示解压缩后的文件夹名字,默认为OpenCV-2.3.1a.
若安装成功,应该会看到输出一副人脸检测的图片。
注意:
在实际编程中,如果需要用到opencv的头文件,比如说cv.h,则应该写为
1
|
#include <opencv/cv.h> |
你可以在/usr/local/include文件夹中发现有opencv和opencv2这两个文件夹。而Linux下头文件搜索路径只包含一级 目录。所以需要手动加上文件夹名字opencv/cv.h,否则编译时会提示没有找到cv.h文件。如果不想每次都加opencv/,则可以将 opencv/中的所有文件链接到/usr/local/include中。
1
|
# ln -s /usr/local/include/opencv/* /usr/local/include/ |
或者在编译选项中显示说明
1
|
$ gcc XXX.cpp `pkg-config --cflags opencv` -o XXX |
同样,动态链接库也会遇到找不到的问题。比如会出现
/usr/local/include/opencv2/core/mat.hpp:297: undefined reference to `cv::fastFree(void*)’
这样的字眼。这个时候需要把动态链接库的路径加到编译选项中。
1
|
$ g++ `pkg-config --cflags --libs opencv` XXX.c -o XXX |
参考资料
[1] http://www.opencv.org.cn/forum/viewtopic.php?t=14610
[2] http://opencv.willowgarage.com/wiki/InstallGuide_Linux