Ubuntu下的完整OpenCV開發環境搭建
1. 操做系統
強烈建議使用ubuntu16.04或ubuntu14.04,在windows下庫的配置極其麻煩。目前比較主流的是ubuntu16.04,但高翔使用的是14.04,由於在他寫《視覺SLAM十四講》的時候ROS和OpenCV等重要部分對16.04缺少支持,如今支持已經相對完善了。
儘可能不要嚐鮮,儘可能不要嚐鮮,儘可能不要嚐鮮,重要的事情說三遍。什麼,想用17.04?啊哈哈你肯定?
這裏須要解釋一下爲何不在Windows下使用Visual Studio。首先,環境變量和庫的配置極其麻煩,並且每次創建新項目都要從新引用,很容易忽略重要的庫而形成麻煩。別說確定都能記得住,除非寫成一個文檔每次新建項目的時候照着作,不然確定會丟東西;其次,在安裝庫的時候出現了g2o庫死活裝不上的問題,這一點讓我直接放棄了Windows,轉向了ubuntu。
相比之下,ubuntu下庫的配置極其簡單,編譯採用Cmake的形式,和VS下的習慣不太同樣,但比在VS下逐條添加引用簡單得多。若是配合Clion這種神通常的IDE,編程簡直就是一種享受。IDE的問題接下來還會詳細說明。
總之,用Ubuntu就對了,千萬不要嘗試Windows。血的教訓。
2. 關於使用虛擬機仍是雙系統
用雙系統會遇到電腦發熱風扇狂轉的問題,目前還沒有解決;
用虛擬機會遇到運行不流暢,點雲圖顯示不出來,某些庫安裝時死機的問題。
本身權衡吧,用臺式機的話建議雙系統,用筆記本的話建議找個臺式機。【認真臉】其實虛擬機也是能夠跑一下的,只不過在安裝ORB SLAM2的時候會遇到卡死的問題,若是不用ORB SLAM2就不用擔憂,放心大膽地用虛擬機吧。就是有點卡。
裝雙系統的時候會遇到引導的問題,必定要在bios裏面設置ubuntu的引導爲第一優先級,否則會直接進windows系統。缺點就是默認系統變成了ubuntu。至於分區那些細節的問題……
我仍是說一下吧,方式就是傳統的u盤裝系統,給電腦硬盤分出50G左右的空間,進入安裝程序中的硬盤分區環節後,這樣分區:
/:存儲系統文件,建議10GB ~ 15GB;
swap:交換分區,即Linux系統的虛擬內存,建議是物理內存的2倍;
/home:home目錄,存放音樂、圖片及下載等文件的空間,建議最後分配全部剩下的空間;
/boot:包含系統內核和系統啓動所需的文件,實現雙系統的關鍵所在,建議200M。
文件格式,除了swap設置成「交換分區」,其餘的所有設置成Ext4。
而後安裝就好。記得在bios裏關閉安全啓動。
3. 編程環境
接下來的這一部分,個人建議是,在/home/【你的用戶名】/路徑下,分別創建文件夾,別分太多層,否則就是給本身添麻煩,以及混淆視聽。以個人系統爲例,我會將OpenCV放在/home/konia/OpenCV裏面。另外在/home/【你的用戶名】/路徑下單獨創建一個文件夾來放項目,這樣會給本身省不少麻煩。
(1)OpenCV
首要的庫就是OpenCV了,目前最新版本是3.3.0,最新的穩定版本是3.2.0,不過要是在OpenCV的官網上直接下默認的源代碼,下載下來的是3.3.0,用起來也沒遇到什麼麻煩。OpenCV官網http://opencv.org/,在這裏能夠下載源代碼。在ubuntu下安裝opencv使用的方式是經過終端,以cmake的方式安裝。如今終端中安裝依賴項:
sudoapt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-devlibtiff4-dev libjasper-dev libopenexr-dev libtbb-dev
順便在這裏簡單講一下Cmake編譯,首先要有一個CMakeLists的txt文件,告訴編譯器你須要編譯哪些內容,這個「內容」在本身編寫的項目中須要自行添加,而在OpenCV裏面已經寫好了這個文件,咱們只需編譯便可。
具體的步驟是,解壓OpenCV,在終端中進入解壓後的文件夾,而後在終端中:
mkdirbuild
cdbuild
cmake..
make
這樣就完成了編譯,但對於OpenCV來講,只有編譯不夠,還要安裝:
sudo make install
這樣纔算安裝完成。
(2)Eigens
這是個線性代數庫,在高翔github上的第三方庫裏能夠找到。
網址:https://github.com/gaoxiang12/rgbd-slam-tutorial-gx
接下來會用到的Ceres和g2o也能夠在這裏找到。安裝的方式和OpenCV大同小異。
(3)Ceres
這個東西……說實話我還沒用到不少,不過既然說了那就裝一下吧。
依賴項:
sudoapt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-devlibgoogle-glog-dev libgtest-dev
(4)g2o
圖優化庫,這個很重要!
依賴項:
sudoapt-get install libqt4-dev qt4-qmake libqglviewer-dev libsuitesparse-devlibcxsparse3.1.2 libcholmod-dev
若是使用的是ubuntu 16.04,那麼須要注意,g2o_viewer的使用須要加一點處理步驟,如下內容引自高翔博士的博客:http://www.cnblogs.com/gaoxiang12/p/4770813.html
「g2o_viewer運行不了了,問題是error while loading shared libraries: libg2o_viewer.so: cannot open shared object file: No such file or directory, 經幫主指點,發現問題的緣由是在默認狀況下,編譯器只會使用/lib和/usr/lib這兩個目錄下的庫文件,經過源碼包進行安裝時,若是不指定--prefix會將庫安裝在/usr/local目錄下,而又沒有在文件/etc/ld.so.conf中添加 /usr/local/lib這個目錄。這樣雖然安裝了源碼包,可是使用時仍然找不到相關的.so庫,就會報錯。也就是說系統不知道安裝了源碼包。網絡上的解決方法是在/etc/ld.so.conf裏添加絕對路徑/usr/local/lib,做爲一個新手,我實在不知道怎麼樣添加進去,用gedit編輯以後,不能保存,用echo /usr/local/lib >> /etc/ld.so.conf沒反應,因而我就採用了奇葩方法:用gedit打開/etc/ld.so.conf,而後添加/usr/local/lib ,再把這個文件保存到home,而後sudo cp -i ld.so.conf /etc/ld.so.conf,以後,執行ldconfig(這一步是必須的,目的是利用ldconfig執行文件將 /etc/ld.so.conf的數據讀入高速緩存中),再次運行g2o_viewer result_after.g2o(跑通《一塊兒作7》,在data文件夾下生成的),成功!」
但在16.04下這還不夠,咱們須要最新的g2o源代碼,不能使用高博士在github上提供的g2o源碼,由於那是針對14.04系統的。在新的g2o中已經解決了這些問題,因此咱們的不必多費周折了。
(5)PCL
這個是點雲庫,很重要。目前的版本是1.8,直接在終端寫:
sudo apt-get install libpcl-dev pcl-tools
便可。
(6)Qt
由於文件太大一直沒下,其實應該裝一個的。
【這部份內容等我嘗試裝過以後補全】
(7)ORB SLAM 2
用虛擬機裝這個會遇到死機的問題。
具體安裝過程參考http://blog.csdn.net/zzlyw/article/details/54730830
4. IDE的安裝與使用
說白了這是個ubuntu下運行的VS,我使用的是Clion,安裝時輸入個激活碼就能夠激活了,很容易。
這貨是ubuntu下獲得編程神器,用過一次就愛上它了,自動在項目裏生成CMakeLists文件,只需自行往裏面添加編譯項就能夠了。以OpenCV爲例:
find_package( OpenCV REQUIRED ),尋找OpenCV庫
include_directories(${OpenCV_INCLUDE_DIRS} )
target_link_libraries(項目名稱 ${OpenCV_LIBS} ),連接OpenCV庫
其餘的庫與OpenCV相似。比較特別的是g2o,接下來的一段引用自高翔的博客:http://www.cnblogs.com/gaoxiang12/p/5304272.html
把g2o引入本身的cmake工程:
html
# 添加g2o的依賴
# 由於g2o不是經常使用庫,要添加它的findg2o.cmake文件
LIST( APPENDCMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules )
SET( G2O_ROOT/usr/local/include/g2o )
FIND_PACKAGE(G2O )
# CSparse
FIND_PACKAGE(CSparse )
INCLUDE_DIRECTORIES(${G2O_INCLUDE_DIR} ${CSPARSE_INCLUDE_DIR} )
同時,在代碼根目錄下新建cmake_modules文件夾,把g2o代碼目錄下的cmake_modules裏的東西都拷進來,保證cmake可以順利找到g2o。 ios