原文地址:http://blog.skyoung.org/2013/05/01/how-to-install-OpenCV-and-boost/
ubuntu 12.04 LTS下安裝OpenCV,Boost等常用庫
最近在搞一個視覺的程序,要用到一些庫,就想着把這些庫的安裝細節記錄一下。其實以前也有弄過,只是一旦安裝好了,時間長了就容易忘記,特別是一些小細節的設置。如果碰上換電腦或是重裝系統,又得重新研究,所以這裏權當是個筆記,以備以後用到時查找。這裏主要介紹OpenCV,Boost,Eigen,libconfig這幾個庫的安裝和設置,其實過程很類似,但考慮到以後用起來省勁,這裏也不厭其煩的全部列出了。
OpenCV
OpenCV的安裝在官網上有個教程,但是按照那個教程總是會出現問題,不盡如人意,這裏記錄一個參考Installing OpenCV 2.4.1 in Ubuntu 12.04 LTS這篇博文的OpenCV的安裝教程備忘。我安裝的是OpenCV2.4.5,其他相近的版本方法應該也是類似。我們希望OpenCV能支持一些第三方的庫,如Qt,OpenGL,Python,TBB等,所以這裏需要提前安裝一些相應的依賴包,然後在cmake的時候做一些設置。
-
保證系統中各個軟件和軟件源都是更新過的,執行下面命令:
#更新源 $ sudo apt-get update #更新已安裝的包 $ sudo apt-get upgrade
-
然後需要安裝一些依賴包,像用於圖像讀寫,攝像頭驅動之類的包(v4l),執行下面命令:
$ sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev
-
去OpenCV官網下載源代碼,解壓後,進入相應的目錄文件夾。因爲我們希望OpenCV支持一些第三方庫,所以這裏需要設置一些東西,我們採用cmake的外部編譯方法,先新建一個build文件,然後進入該文件夾進行編譯。因爲OpenCV在debug和release兩種模式下生產的庫文件不盡相同,debug模式因爲添加了很多調試信息,文件大小相對會大一些,所以這裏分別編譯debug和release兩種模式下的OpenCV。 對於debug模式,執行如下命令:
$ mkdir build $ cd build $ cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D CMAKE_BUILD_TYPE=DEBUG -D CMAKE_INSTALL_PREFIX=/usr/local/OpenCV/Debug ..
這裏有個地方需要注意,命令最後是兩個點,是上一層目錄的意思,因爲Cmakelist.txt在build的上層目錄中。安裝路徑通過
CMAKE_INSTALL_PREFIX
設置爲/usr/local/OpenCV/Debug
,默認是/usr/local
。而編譯類型通過CMAKE_BUILD_TYPE=DEBUG
設爲DEBUG,默認是RELEASE。對於Release下的編譯,只需要更改這兩個部分即可,即:$ cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/OpenCV/Release ..
-
cmake結束後,檢查輸出的各個選項是否符合要求。特別注意FFMPEG(用於視頻的讀寫)和V4L(攝像頭的驅動),因爲這倆是我最常用的功能,我這裏特別點出。我的配置的結果如下圖:
-
編譯安裝OpenCV,命令如下:
$ make $ sudo make install
-
設置庫的搜索路徑,在
/etc/ld.so.conf.d/
加入對於庫的.conf
文件,首先新建opencv.conf
$ sudo gedit /etc/ld.so.conf.d/opencv.conf
在
opencv.conf
中加入函數庫所在的目錄:/usr/local/OpenCV/Debug/lib /usr/local/OpenCV/Release/lib
也可以在
ld.so.conf
文件中$ sudo gedit /etc/ld.so.conf
加入上述目錄。其實
ld.so.conf
中寫着如下代碼:$ include /etc/ld.so.conf.d/*.conf
說明
ld.so.conf
是包含ld.so.conf.d
中所有的.conf
文件的。 -
接下來利用
ldconfig
命令,將/etc/ld.so.conf.d
中的數據讀入緩存,$ sudo ldconfig
-
然後添加pkg-config環境變量,便於pkg-config找到
*.pc
文件。因爲我們生成了兩個版本的OpenCV,爲了便於區分,分別把Debug和Release下lib/pkgconfig
下對應的*.pc
文件改名爲opencv-debug
和opencv-release
。然後把這兩個路徑設置在環境變量中,$ sudo gedit /etc/profile
把以下代碼寫入文件的最後並保持。
export PKG_CONFIG_PATH=/usr/local/OpenCV/Debug/lib/pkgconfig:$PKG_CONFIG_PATH export PKG_CONFIG_PATH=/usr/local/OpenCV/Release/lib/pkgconfig:$PKG_CONFIG_PATH
或者,直接把這兩文件放到一起,然後放到某個位置,再把這個路徑設置到環境變量中。pkg-config的默認搜索路徑是/usr/local/lib/config
,所以可以直接放在這個路徑下,無需設置環境變量。
這樣OpenCV的安裝就完成了,可以參考Using OpenCV with gcc and CMake中講解的OpenCV使用方法嘗試測試幾個簡單的程序試試。
使用動態庫的程序在運行的時候需要搜尋動態庫的位置,這裏第6-7步設置庫的搜索路徑就是爲了告訴程序動態庫的位置,以確保程序的正常運行。第8步的作用是告訴pkg-config工具*.pc
文件的位置,以便pkg-config得到編譯預處理參數(宏定義,頭文件位置等)和鏈接參數(庫及依賴的庫的位置,文件名等),方便程序的編譯和鏈接。具體的理解可以參考這篇博客理解
pkg-config 工具。
Boost
Boost的大部分文件是不需要編譯的,因爲都是頭文件,直接把頭文件複製到你想要的地方就可以了,然後使用的時候就把include頭文件鏈接到程序中就可以了。這裏着重講講需要編譯的部分,官方網站給出如下需要編譯的文件:
- Boost.Filesystem
- Boost.GraphParallel
- Boost.IOStreams
- Boost.MPI
- Boost.ProgramOptions
- Boost.Python (see the Boost.Python build documentation before building and installing it)
- Boost.Regex
- Boost.Serialization
- Boost.Signals
- Boost.System
- Boost.Thread
- Boost.Wave
而我正好用到Boost.Filesystem和Boost.System,所以要編譯,就把這個部分記錄一下。我主要參考的是官網中如下部分:Easy Build and Install
-
去官網下載Boost,解壓到某個目錄下,然後進入這個目錄,執行如下命令,查看一下命令選項的設置
$ ./bootstrap.sh --help
-
設置boost的安裝路徑,比如
/usr/local/boost-1.53.0
,則命令如下:$ ./bootstrap.sh --prefix=/usr/local/boost-1.53.0
-
安裝boost
$ ./b2 install
-
設置庫的路徑,和上面OpenCV一樣,有兩種方法,這裏選擇第一種:
$ sudo gedit /etc/ld.so.conf.d/boost.conf
加入函數庫目錄:
/usr/local/boost-1.53.0/lib
這樣Boost的安裝就完成了,非常簡單。
Eigen
其實,Eigen也是隻有頭文件,直接複製到合適的地方就可以。還有一種方法是INSTALL文件提到的利用cmake的安裝的方法,這裏簡單介紹一下:
-
首先是外部編譯,建立新的文件夾build,設置安裝路徑,比如我的是/usr/local/Eigen-3.1.3
$ mkdir build $ cd build $ cmake -D CMAKE_INSTALL_PREFIX=/usr/local/Eigen-3.1.3 ..
-
安裝Eigen到指定的路徑,由於沒有需要編譯的東西,就不需要make了。
$ sudo make install
這樣Eigen就安裝結束了。
libconfig
libconfig沒有采用cmake構建makefile,而是有一個configure文件負責makefile的生成。具體步驟如下:
-
先輸入如下命令
$ ./configure --help
查看一下configure裏面的一些選項,看一看有沒有自己用得到的,其中常用的就是
--prefix
選項,用來設置安裝路徑的,假設我們設爲usr/local/libconfig-1.4.9
,則$ ./configure --prefix=usr/local/libconfig-1.4.9
-
清除上一次編譯的目標文件,這一步不是必須的,但做了沒壞處,防止源代碼中存在上一次編譯的目標文件。
$ make clean
-
編譯並安裝,
$ make $ sudo make install
-
設置庫的路徑,
$ sudo gedit /etc/ld.so.conf.d/libconfig.conf
加入函數庫目錄:
$ /usr/local/libconfig-1.4.9/lib
總結
總的來說,庫的安裝還是比較相似的,一般是通過cmake或者自帶的configure文件安裝。而且庫在發佈的時候,會在readme或者intall文件中大體闡述庫的安裝方法,也可以去官網查詢。具體思路一般就是先生成makefile,然後按照安裝軟件的方式安裝即可。