总结网上的方案,结合自己的安装经历,受惠于网络,回馈于网络,写下这篇博文,希望对大家有帮助~
首先声明下,安装和写这篇博文过程中,看了很多相关的文章,自己都记不清了,所以本文参考的内容这里就不一一列出了,哈哈~
1 安装cmake
这个在ubuntu下一句命令搞定,
$ apt-get install cmake
这样子安装的cmake是没有cmake-gui的,但使用命令来cmake也十分简单。(apt-get下载的文件存放在/var/cache/apt/archives目录下)。
通过以下命令查看cmake安装是否成功
$ cmake-version
成功的话会返回版本号。
2 安装相关的包
$ apt-get install libgtk2.0-dev
$ apt-get install pkg-config
12.04版本下只需要装这两个包,其中后一个包在我的电脑上可能是已经更新过了,所以实际上不用装。不管怎么样,都运行一下这两条命令。
3 安装opencv
我用的版本是2.4.3,但2.0之后的版本安装应该都差不多。包下载地址:
http://www.opencv.org.cn/index.php/Download。下载过来的包名称是OpenCV-2.4.3.tar.bz2。我把这个包放到/home/pxf/temp下,解压,
$ tar jxvf OpenCV-2.4.3.tar.bz2
得到文件夹OpenCV-2.4.3。进入该文件夹,
$ cd OpenCV-2.4.3
$ mkdir build
$ cd build
新建的build文件夹作为cmake编译后的opencv文件输出目录。
接下来进行cmake,
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/home/pxf/study/OpenCV -D BUILD_PYTHON_SUPPORT=ON ..
这里,把编译选项选为RELEASE;把OpenCV安装路径设为/home/pxf/study/OpenCV下(安装后该文件夹含有4个文件夹bin、include、lib、share)。比较好的做法是把它安装到/usr/local、/usr/lib、/lib下,尤其推荐第一个,因为一般来说开源的软件都会安装到该目录下。我的安装目录后来给我造成了不少麻烦,后面再谈。
cmake运行成功后,会在build目录下生成makefile,我们运行就可以了,它会把OpenCV安装到我们cmake设定的路径下,
$ make
$ make install
前一条命令比较耗时。
4 系统环境变量配置
接下来非常重要的一步,是对系统相关环境变量进行配置,如果不做好配置,那么不仅5中的编译不能通过,即使编译出可执行文件了该文件也运行不起来(因为找不到共享库*.so文件)。
首先要做的是,将/home/pxf/study/OpenCV/lib/pkg-config(这是我的安装路径,要看自己的安装路径)中的opencv.pc拷贝到/usr/lib/pkg-config中,如果不做这步,根本编译不起!这个文件包含着关于OpenCV共享库(.so)的很多使用信息(例如,库文件路径、名称及头文件信息),对编译非常重要。另一种方案是更改环境变量让系统找得到opencv.pc文件,做法如下,
$ sudo gedit /etc/bash.bashrc
在该文件的末尾添加以下内容,
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/pxf/study/OpenCV/lib/pkg-config
export PKG_CONFIG_PATH
(这里两种方法,前一种方法是我试过的,后一种没试过但应该可行)
做了这一步后,编译没问题了,但是如果你没做以下步骤,编译出来的可执行文件是运行不了的。这是因为,/usr/lib/pkg-config只跟编译有关,不做下面的步骤可执行文件运行时还是找不到共享库在哪里。OpenCV的共享库文件在安装路径的lib文件夹下。
配置的方法和cmake时设定的安装路径有关,确切地说,是和安装后的共享库的位置相关,主要分以下三种:
(4.1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么只需执行一下ldconfig命令。ldconfig命令的用途主要是,在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件夹/etc/ld.so.conf内所列文件下,搜索出可共享的动态链接库,进而创建出动态装入程序(ld.so)所需的连接和缓存文件。
(4.2) 如果共享库文件安装到了/usr/local、/home/pxf/study/OpenCV等非”/lib”或/usr/lib"目录,那么在执行ldconfig命令前,还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中,
$ sudo gedit /etc/ld.so.conf.d/opencv.conf
这样创建了opencv.conf,然后在该文件中添加/home/pxf/study/OpenCV/lib,保存,退出,然后配置库,
$ sudo ldconfig
(4.3) 第二种情况下,如果不想在/etc/ld.so.conf中加文件加路径(或者是没有权限加路径),那可以export一个全局变量LD_LIBRARY_PATH,然后运行可执行程序就会成功,因为这时系统会根据这个临时全局变量,去这个目录中找共享库。
$ export LD_LIBRARY_PATH=/home/pxf/study/OpenCV/lib
这是种临时的解决方法,一旦重新运行一个终端,就需要再次运行这个命令才能让系统找得到共享库。
(这里就是我吃苦头的地方,经过试验2、3两种方法可以解决我的安装路径的问题,其中2可以一次性解决,3在每次重启终端时都要在运行一次export命令才行。)
5 测试
到这里opencv基本安装完成,接下来测试一下,提供两种我试过的测试方案:
5.1. 进入下载过来解压后的文件,编译里面的sample代码,成功后运行看效果,
$ cd OpenCV2.4.3/samples/c
$ g++ `pkg-config --cflags opencv` -o morphology morphology.c `pkg-config --libsopencv`
$ ./morphology
5.2. 编译所有sample代码,运行其中之一(./morphology也在其中),下面举一个其他的例子来运行,这是个人脸检测的代码,
$ cd OpenCV2.4.3/samples/c
$ ./build_all.sh
$ ./facedetect --cascade="/home/pxf/study/OpenCV/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg
最后一条命令中的路径就是OpenCV安装后4个文件的其中之一share,里面包含了一些安装包提供的训练数据等等。