【CV實戰(zhàn)】Ubuntu18.04源碼編譯安裝opencv-3.4.X+測試demo

17.jpg

之前在Windows上借助VS編譯opencv,很輕松就能搞定,到Linux下踩了坑,Ubuntu下編譯山憨、卸掉重編、搞了幾次弥喉,還把系統庫給卸載掉了(sudo apt-get remove python3.6千萬不要嘗試).....如果你也通過卸載python2.x郁竟、python3.x把系統搞掛了,沒有了桌面由境,千萬不要慌~首先棚亩,卸載了就搞干凈點:sudo apt-get autoremove,然后虏杰,安裝一個全新的Ubuntu桌面讥蟆,sudo apt-get install ubuntu-desktop,最后你會發(fā)現纺阔,有驚無險瘸彤,桌面回來了!5讯邸钧栖!

下面回到正題:Ubuntu18.04安裝opencv-3.4.x(5.6.8都試過低零,沒問題)

原文轉載自:語雀文檔 ,樣式更好看:)


1 源碼下載

官網:https://opencv.org/releases/ Github:https://github.com/opencv/opencv 隨便從哪下載拯杠,都可以

2. apt-get安裝

Ubuntu下,OpenCV的安裝方式有兩種:

  • 1.通過apt-get 安裝opencv-python
  • 2.從源碼構建

方式1.很簡單:直接$ sudo apt-get install python-opencv 如果你只是在python中簡單使用opencv啃奴,首選此種方式安裝潭陪,如果你需要在其他項目中編譯引用opencv,建議從源碼構建安裝最蕾;還有一點:python-opencv里的代碼可能沒有源碼更新的及時依溯,從源碼構建雖然復雜,不過穩(wěn)定些瘟则、可控性更強黎炉。下文主要介紹通過源碼構建安裝OpenCV,系統及版本:Ubuntu18.04 + Opencv3.4.8醋拧。

3 從源碼安裝

從源碼編譯安裝的方式又有兩種:

  • 默認位置安裝
  • 自定義位置安裝

推薦默認位置安裝慷嗜,安裝后可執(zhí)行文件和lib文件都會安裝到系統相應路徑,方便使用丹壕。自定義位置安裝則需要自己設置環(huán)境變量和其他的設置庆械。如果只是簡單應用,不是對opencv各個版本有使用區(qū)分菌赖,建議直接默認位置安裝缭乘。 不論是默認安裝還是自定義位置、安裝前都需要安裝一些構建必須的依賴項琉用。

3.1 構建依賴項

安裝前需要下載一些必須的依賴項堕绩。 不同版本opencv依賴會有不同,具體見官網邑时,下面的依賴項適用于opencv-3.4.8

官網:https://docs.opencv.org/3.4.8/d2/de6/tutorial_py_setup_in_ubuntu.html

1.cmake gcc g++ 通常系統都有驼仪,可以cmake(gcc/g++) --version查看其版本:

image

有的話無需安裝,否則可以執(zhí)行如下命令安裝:

sudo apt-get install cmake
sudo apt-get install gcc g++

2.安裝python2薯嗤、python3支持模塊

可選豪墅、譬如你可以只打算在python3里用opencv,那么就忽略python2的模塊安裝铣口。

# 安裝python2支持
sudo apt-get install python-dev python-numpy
# 安裝python3支持
sudo apt-get install python3-dev python3-numpy

3.GTK支持(圖形界面庫)

# 安裝gtk2支持
sudo apt-get install libgtk2.0-dev
# 安裝gtk3支持
sudo apt-get install libgtk-3-dev

4.可選圖片支持庫

用于處理多種圖片格式(可選)

sudo apt-get install libpng-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libopenexr-dev
sudo apt-get install libtiff-dev
sudo apt-get install libwebp-d

5.下載ippcv

cmake時會自動下載ippcv滤钱,如果不翻墻可能速度過慢,導致cmake一直卡在那脑题,解決方法:下載壓縮包 ippicv_2019_lnx_intel64_general_20180723.tgz 放在opencv源碼主目錄/3rdparty/ippicv/下件缸,同時修改統計目錄下的ippicv.cmake,把47行的下載鏈接換成本地文件:file: ROOT_DIR/3rdparty/ippicv/ippicv_2019_lnx_intel64_general_20180723.tgz

image

3.2 默認位置安裝

git clone或官網下載的壓縮包解壓后得到opencv源碼包叔遂,切換到源碼主目錄

# 新建build文件夾他炊,存放構建文件
$ mkdir build
$ cd build

執(zhí)行cmake争剿,構建CMakeLists.txt自動化創(chuàng)建makefile,cmake需要之前可以指定一些構建參數痊末,用來確定安裝位置蚕苇、是否為python2/python3執(zhí)行安裝等、構建的類型是否是release等凿叠,如果不指定參數涩笤,直接傻瓜式cmake也是可以的。

# 傻瓜式cmake
cmake ../
# 帶參數cmake 默認位置安裝
cmake ../ -DWITH_CUDA=OFF  -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON  -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF
# 帶參數cmake 自定義位置安裝
cmake ../ -DWITH_CUDA=OFF -DCMAKE_INSTALL_PREFIX=/usr/local/opencv/opencv-3.4.8 -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON  -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF

注意盒件,-D是cmake執(zhí)行時指定的參數 CMAKE_INSTALL_PREFIX是默認安裝路徑前綴蹬碧,如不指定,默認是/usr/local炒刁,也可以指定自定義文件夾(見下面的【自定義安裝】)恩沽;WITH_CUDA默認是開啟的,如果不指定OFF則opencv編譯時會默認使用可用的CUDA,雖然速度會提升翔始,不過可能會和其他使用cuda的深度學習框架有沖突罗心,建議根據opencv實際使用情況來決定是否開啟CUDA加速!CMAKE_BUILD_TYPE可以根據需要選擇DEBUG或RELEASE绽昏。

cmake選項設置參考:
https://docs.opencv.org/3.4/d7/d9f/tutorial_linux_install.html http://amritamaz.net/blog/opencv-config

image

cmake主要是用于生產Makefile的协屡,正式的構建還沒開始,執(zhí)行make -j8構建

# 執(zhí)行make編譯全谤,-j8參數表示允許cpu并行編譯肤晓,最多允許8個線程,可以大大加速構建過程
# -j根據自己cpu核心數設定,6核可以設為-j6~-j12
make -j8
image

構建過程耗時幾分鐘认然,完成后补憾,需要make install將編譯生成的可執(zhí)行文件和lib文件等,安裝到系統相應目錄卷员。

# 安裝編譯好的可執(zhí)行文件
sudo make install

默認位置安裝盈匾,則會安裝到系統如下目錄:

  • /usr/local/bin
  • /usr/local/lib
  • /usr/local/share

bin下的可執(zhí)行文件:

image

lib是庫文件,主要是以libopencv開頭的so文件毕骡、文件夾:pkgconfig削饵、python2.x、python3.x(pkgconfig里存放的是opencv.pc)未巫;share里就兩個文件夾:OpenCV和licenses 安裝好還需要進行配置窿撬,見下面【配置】一節(jié)

3.3 自定義位置安裝

自定義位置安裝,前面的步驟都和默認安裝一致叙凡,主要是cmake時需要指定編譯參數-DCMAKE_INSTALL_PREFIX為自己指定的目錄劈伴,然后增加相應的設置:主要是置掃描路徑和設置環(huán)境變量。**

自定義安裝握爷,執(zhí)行sudo make install后跛璧,會安裝到自定義目錄的相應位置严里,譬如,我自定義目錄: /usr/local/opencv/opencv-3.4.8追城,下文用OPENCV_DIR_PATH代表刹碾。則安裝到以下位置:

  • /usr/local/opencv/opencv-3.4.8/bin
  • /usr/local/opencv/opencv-3.4.8/lib
  • /usr/local/opencv/opencv-3.4.8/share

3.3.1 設置掃描路徑

設置掃描路徑,這塊主要針對自定義位置安裝漓柑,項目編譯后產生的可執(zhí)行文件教硫、庫文件、頭文件需要被別的項目引用辆布,掃描路徑怎么設置?也有兩種方式:

  • 1.復制opencv.pc至系統pkgconfig文件夾中
  • 2.將opencv.pc所在目錄設定到環(huán)境變量PKG_CONFIG_PATH

OpenCV編譯后會在/OPENCV_DIR_PATH/lib/pkgconfig/下產生opencv.pc文件茶鉴,里面定義了這些路徑變量:

image

prefix定義了編譯安裝的主目錄锋玲;exec_prefix則是可執(zhí)行文件目錄;然后還有include文件夾目錄等等涵叮。

通過/usr/bin/下的pkg-config命令惭蹂,會掃描所有系統/usr/lib/下和環(huán)境變量PKG_CONFIG_PATH所定義的所有pkgconfig文件夾,這些文件夾都是存放各個程序編譯信息.pc文件割粮,pkg-config掃描后盾碗,這些.pc文件保存的編譯信息就能被其他項目/程序獲取。(.pc文件主要定義了安裝程序的主目錄prefix舀瓢、可執(zhí)行程序目錄exec_prefix廷雅、lib目錄libdir、包含目錄includedir京髓、sharedlibdir等航缀,有點類似于環(huán)境變量,不過更多是為了程序編譯服務的)

# 查看所有系統將會掃描的pkgconfig文件夾路徑堰怨;
pkg-config --variable pc_path pkg-config
#根據opencv.pc查看其有那些路徑變量
pkg-config --print-variables opencv
#查看opencv.pc中prefix變量的值(即其編譯安裝的位置)
pkg-config --variable prefix opencv
image

自定義安裝芥玉,我們會在/OPENCV_DIR_PATH/lib/pkgconfig/下發(fā)現opencv.pc。于是我們有兩種選擇: 1.復制opencv.pc至系統pkgconfig文件夾中 **理論上可以將opencv.pc復制到任意一個 **pkg-config --variable pc_path pkg-config 列出的pkgconfig文件夾中备图,不過最好復制到/usr/local/lib/pkgconfig/下灿巧。 例:

cd /OPENCV_DIR_PATH/lib/pkgconfig
sudo cp opencv.pc  /usr/local/lib/pkgconfig

Ubuntu18.04安裝后,系統自帶了opencv3.2.0揽涮,默認將opencv.pc存放在/usr/lib/x86_64-linux-gnu/pkgconfig/下抠藕,如果需要將opencv.pc復制到這里,可以先將系統自帶的opencv.pc備份下绞吁,然后再cp過去幢痘。 2.將opencv.pc所在目錄設定到環(huán)境變量PKG_CONFIG_PATH

#修改bash.bashrc文件
sudo vim /etc/bash.bashrc
# 在最后加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/OPENCV_DIR_PATH/lib/pkgconfig
export PKG_CONFIG_PATH
source /etc/bash.bashrc
#查看變量是否生效
echo $PKG_CONFIG_PATH

3.3.2 設置環(huán)境變量

這里有兩塊:

1.設置OpenCV的環(huán)境變量(可選,不建議) 如果編譯時默認安裝的位置是系統bin和lib文件夾家破、所以可執(zhí)行文件和lib文件都可以立即執(zhí)行颜说。譬如:opencv_version這個可執(zhí)行程序购岗,由于其路徑屬于系統路徑:usr/bin/opencv_version,故可以在任意shell窗口中直接運行门粪,自定義位置安裝的則不可以喊积。故可以為其設置環(huán)境變量,不過通常也不需要,原因有兩點:1.opencv的可執(zhí)行命令較少2.通常我們編譯OpenCV并不是為了得到其可執(zhí)行文件玄妈,而是為了得到lib文件夾中的.so庫文件乾吻,供其他程序/項目直接引用。

2.設置Python的cv2包的環(huán)境變量(必須) 自定義位置編譯時拟蜻,可能會出現一種情況绎签,編譯成功安裝成功,OpenCV的c++demo也可以正常運行酝锅,但是進入python環(huán)境import cv2時會發(fā)現找不到包诡必。因為自定義編譯時,生成的cv2模塊路徑是: /OPENCV_DIR_PATH/lib/python3.6/dist-packages 需要將此路徑設置加入環(huán)境變量PYTHONPATH中搔扁,以便于python環(huán)境中import時可以找到cv2爸舒。

# 新增PYTHONPATH環(huán)境變量
sudo vim ~/.bashrc
export PYTHONPATH=$PYTHONPATH:/OPENCV_DIR_PATH//lib/python3.6/dist-packages
#如:export PYTHONPATH=$PYTHONPATH:/usr/local/opencv/opencv-3.4.8/lib/python3.6/dist-packages
source ~/.bashrc

然后,我們就可以正常在python環(huán)境中import cv2了稿蹲。

image

安裝好還需要進行配置扭勉,見下面【配置】一節(jié)

4. 配置

主要是將opencv的lib路徑添加到配置,能被系統掃描到苛聘,有什么用涂炎?其他項目,如darknet構建時需要用到opencv的lib,就可以直接引用到焰盗。

sudo gedit /etc/ld.so.conf.d/opencv.conf

將你opencv安裝目錄/lib路徑寫入opencv.conf,并保存璧尸。如果你編譯時是默認安裝,路徑是: /usr/local/lib熬拒。

image

保存后刷新爷光,使配置生效

#刷新lib庫目錄
sudo ldconfig
#刷新目錄緩存
sudo /sbin/ldconfig

有的教程寫的是:編輯/etc/ld.so.conf,在最后加入 include /usr/local/lib澎粟,效果一樣

5. 驗證

查看版本

方式一:shell中直接查看

pkg-config opencv --modversion

方式二:python中查看

>>>import cv2;

>>>cv2.__version_``_

Python dmeo

import cv2 as cv
img = cv.imread('/home/lyon/Desktop/helloworld.jpg',1)
cv.imshow('Image',img)
cv.waitKey(0)

效果:桌面彈出一個圖片框:

image

C++ demo

找到你的opencv源碼包蛀序,假如是opencv-3.4.8,cd到opencv-3.4.8/samples/cpp/example_cmake/下執(zhí)行官方給出的demo,需要執(zhí)行cmake和make來編譯cpp文件:

cmake .
make
./opencv_example

執(zhí)行demo會調用打開Sample窗口,并調用你本地攝像頭顯示畫面活烙,沒有攝像頭畫面如下:

image

如果你是自定義路徑安裝的徐裸,請注意一下: 看一下CmakeLists.txt的內容:

image

注釋中表示,你需要設置變量OpenCV_DIR來找到OpenCVConfig.cmake文件的位置啸盏。通常如果你是執(zhí)行默認位置安裝重贺,那么系統默認路徑為:/usr/share/OpenCV/OpenCVConfig.cmake。如果你是自定義位置安裝,需要通過在CmakeLists.txt中設置OpenCV_DIR變量的路徑气笙,來定位到你的Opencv目錄次企,譬如:

set(OpenCV_DIR /usr/local/opencv/opencv-3.4.8/share/OpenCV/)

6. 卸載

卸載相比安裝,容易了許多潜圃,還是cd到opencv源碼主目錄/build文件夾下 sudo make uninstall

image

執(zhí)行sudo make uninstall可將opencv相關的可執(zhí)行文件缸棵、lib文件等從/usr/local/bin/、/usr/local/lib谭期、usr/local/share中刪除,不過還是會留空下文件夾堵第,需要手動刪除∷沓觯可以繼續(xù)執(zhí)行:sudo make clean 將源碼包內的編譯相關文件刪除踏志、最后在build文件夾內執(zhí)行sudo rm rf *刪除源碼包內所有文件。


有用的話胀瞪,請點個贊哦 :)

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末狰贯,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子赏廓,更是在濱河造成了極大的恐慌,老刑警劉巖傍妒,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幔摸,死亡現場離奇詭異,居然都是意外死亡颤练,警方通過查閱死者的電腦和手機既忆,發(fā)現死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嗦玖,“玉大人患雇,你說我怎么就攤上這事∮畲欤” “怎么了苛吱?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長器瘪。 經常有香客問我翠储,道長,這世上最難降的妖魔是什么橡疼? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任援所,我火速辦了婚禮,結果婚禮上欣除,老公的妹妹穿的比我還像新娘住拭。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布滔岳。 她就那樣靜靜地躺著杠娱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澈蟆。 梳的紋絲不亂的頭發(fā)上墨辛,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音趴俘,去河邊找鬼睹簇。 笑死,一個胖子當著我的面吹牛寥闪,可吹牛的內容都是我干的太惠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼疲憋,長吁一口氣:“原來是場噩夢啊……” “哼凿渊!你這毒婦竟也來了?” 一聲冷哼從身側響起缚柳,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤埃脏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后秋忙,有當地人在樹林里發(fā)現了一具尸體彩掐,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年灰追,在試婚紗的時候發(fā)現自己被綠了堵幽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡弹澎,死狀恐怖朴下,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情苦蒿,我是刑警寧澤殴胧,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站刽肠,受9級特大地震影響溃肪,放射性物質發(fā)生泄漏。R本人自食惡果不足惜音五,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一惫撰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躺涝,春花似錦厨钻、人聲如沸扼雏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诗充。三九已至,卻和暖如春诱建,著一層夾襖步出監(jiān)牢的瞬間蝴蜓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工俺猿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茎匠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓押袍,卻偏偏與公主長得像诵冒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谊惭,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容