之前在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查看其版本:
有的話無需安裝,否則可以執(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
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
cmake主要是用于生產Makefile的协屡,正式的構建還沒開始,執(zhí)行make -j8構建
# 執(zhí)行make編譯全谤,-j8參數表示允許cpu并行編譯肤晓,最多允許8個線程,可以大大加速構建過程
# -j根據自己cpu核心數設定,6核可以設為-j6~-j12
make -j8
構建過程耗時幾分鐘认然,完成后补憾,需要make install將編譯生成的可執(zhí)行文件和lib文件等,安裝到系統相應目錄卷员。
# 安裝編譯好的可執(zhí)行文件
sudo make install
默認位置安裝盈匾,則會安裝到系統如下目錄:
- /usr/local/bin
- /usr/local/lib
- /usr/local/share
bin下的可執(zhí)行文件:
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文件茶鉴,里面定義了這些路徑變量:
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
自定義安裝芥玉,我們會在/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了稿蹲。
安裝好還需要進行配置扭勉,見下面【配置】一節(jié)
4. 配置
主要是將opencv的lib路徑添加到配置,能被系統掃描到苛聘,有什么用涂炎?其他項目,如darknet構建時需要用到opencv的lib,就可以直接引用到焰盗。
sudo gedit /etc/ld.so.conf.d/opencv.conf
將你opencv安裝目錄/lib路徑寫入opencv.conf,并保存璧尸。如果你編譯時是默認安裝,路徑是: /usr/local/lib熬拒。
保存后刷新爷光,使配置生效
#刷新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)
效果:桌面彈出一個圖片框:
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窗口,并調用你本地攝像頭顯示畫面活烙,沒有攝像頭畫面如下:
如果你是自定義路徑安裝的徐裸,請注意一下: 看一下CmakeLists.txt的內容:
注釋中表示,你需要設置變量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
執(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 *
刪除源碼包內所有文件。
有用的話胀瞪,請點個贊哦 :)