Linux下安装OpenCV

总结网上的方案,结合自己的安装经历,受惠于网络,回馈于网络,写下这篇博文,希望对大家有帮助~

首先声明下,安装和写这篇博文过程中,看了很多相关的文章,自己都记不清了,所以本文参考的内容这里就不一一列出了,哈哈~

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,里面包含了一些安装包提供的训练数据等等。

 

你可能感兴趣的:(linux,opencv)