Ubuntu 16.04: How to install OpenCV

參考:https://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-install-opencv/python

步驟# 1:安裝opencv的依賴項linux

本教程中的大部分(實際上所有)步驟將經過使用您的終端來完成。 首先,打開命令行並更新apt-get軟件包管理器以刷新和升級以及預先安裝的軟件包/庫:git

 1 sudo apt-get update github

2 sudo apt-get upgrade  shell

接下來,讓咱們安裝一些開發者工具:bootstrap

 1 sudo apt-get install build-essential cmake pkg-config ubuntu

pkg-config軟件包(很是有可能)已經安裝在你的系統上,但爲了以防萬一,必定要將它包含在上面的apt-get命令中。 cmake程序用於自動配置咱們的OpenCV版本。vim

OpenCV是一個圖像處理和計算機視覺庫。 所以,OpenCV須要可以從磁盤加載各類圖像文件格式,例如JPEG,PNG,TIFF等。爲了從磁盤加載這些圖像,OpenCV實際上調用了其餘圖像I / O庫,它們實際上有助於加載和解碼 處理。 咱們在下面安裝必要的:瀏覽器

 1 sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev bash

好的,如今咱們有圖書館從磁盤加載圖像 - 但視頻呢? 使用如下命令來安裝用於處理視頻流和從相機訪問幀的軟件包:

 1 sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

2 sudo apt-get install libxvidcore-dev libx264-dev 

OpenCV經過一套很是有限的GUI工具提供開箱即用的功能。 這些GUI工具容許咱們在屏幕上顯示圖像(cv2.imshow),等待/記錄按鍵(cv2.waitKey),跟蹤鼠標事件(cv2.setMouseCallback)以及建立簡單的GUI元素,如滑塊和軌跡條。 一樣,你不該該指望用OpenCV構建完整的GUI應用程序 - 這些只是簡單的工具,可讓你調試代碼並構建很是簡單的應用程序。

在內部,處理OpenCV GUI操做的模塊的名稱是highgui。 highgui模塊依賴於GTK庫,您應該使用如下命令安裝它:

 1 sudo apt-get install libgtk-3-dev 

接下來,咱們安裝用於優化OpenCV內部各類功能的庫,例如矩陣操做:

 1 sudo apt-get install libatlas-base-dev gfortran 

咱們將經過爲Python 2.7和Python 3.5安裝Python開發頭文件和庫(這兩種方式)來完成第1步:

 1 sudo apt-get install python2.7-dev python3.5-dev 

注意:若是你沒有安裝Python開發頭文件和靜態庫,你將在步驟4中遇到問題,咱們運行cmake來配置咱們的版本。 若是沒有安裝這些頭文件,那麼cmake命令將沒法自動肯定Python解釋器和Python庫的正確值。 簡而言之,本節的輸出將顯示爲「空白」,您將沒法構建Python綁定。 當你到達第4步時,花時間比較你的命令輸出到個人。

步驟#2:下載OpenCV源代碼

在本文發佈時,OpenCV的最新版本是3.1.0,咱們使用如下命令下載.zip並解壓縮:

cd ~
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
unzip opencv.zip

當新版本的OpenCV發佈後,您能夠檢查官方OpenCV GitHub並經過更改.zip的版本號下載最新版本。

可是,咱們還沒有完成下載源代碼 - 咱們還須要opencv_contrib存儲庫:

 1 wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip

2 unzip opencv_contrib.zip 

爲何咱們要麻煩的去下載contrib?

那麼,咱們但願OpenCV 3的完整安裝可以訪問諸如SIFT和SURF等功能(無雙關語)。 在OpenCV 2.4中,SIFT和SURF被包含在OpenCV的默認安裝中。 然而,隨着OpenCV 3+的發佈,這些軟件包已被轉移到contrib中,該軟件包含(1)當前正在開發的模塊或(2)標記爲「非空閒」(即已得到專利)的模塊。 您能夠在此博客文章中瞭解有關SIFT / SURF重組背後緣由的更多信息。

注意:您可能須要在複製和粘貼過程當中使用「<=>」按鈕擴展上述命令。 3.1.0.zip中的.zip可能會在較小的瀏覽器窗口中被截斷。 爲了方便,我已經包含了opencv歸檔文件的完整URL以及下面的opencv_contrib歸檔文件:

我也想提一下,你的opencv和opencv_contrib版本應該是同樣的(在這種狀況下,3.1.0)。若是版本號不匹配,則可能會很容易地遇到編譯時錯誤(或更糟糕的是,運行時錯誤幾乎沒法調試

第3步:設置您的Python環境 - Python 2.7或Python 3

咱們如今準備開始爲構建配置咱們的Python開發環境。 第一步是安裝Python包管理器pip:

cd ~
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py

我在每一篇我曾經作過的OpenCV + Python安裝教程中都提到了這一點,但今天我會在這裏再次提到它:我是virtualenv和virtualenvwrapper的忠實粉絲。 這些Python軟件包容許您爲每一個正在處理的項目建立單獨的獨立Python環境。

簡而言之,使用這些軟件包能夠解決「Project X取決於版本1.x,但Project Y須要4.x困境。 使用Python虛擬環境的一個奇妙的反作用是你能夠保持你的系統Python整潔,整潔而且沒有混亂。

雖然你確定能夠在沒有Python虛擬環境的狀況下使用Python綁定來安裝OpenCV,可是我強烈建議你使用它們,由於其餘PyImageSearch教程利用Python虛擬環境。 我也會假設你已經在本指南的其他部分安裝了virtualenv和virtualenvwrapper。

若是您想要詳細解釋爲何Python虛擬環境是最佳實踐,那麼您絕對應該在RealPython上閱讀這篇優秀的博客文章。 我還提供了一些關於爲何我我的更喜歡本教程前半部分的Python虛擬環境的評論。

再次,讓我重申,Python社區的標準作法是利用某種虛擬環境,因此我建議你也這樣作:

sudo pip install virtualenv virtualenvwrapper
sudo rm -rf ~/get-pip.py ~/.cache/pip

一旦咱們安裝了virtualenv和virtualenvwrapper,咱們須要更新咱們的〜/ .bashrc文件,在文件底部包含如下行:

# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

〜/ .bashrc文件只是一個shell腳本,只要你啓動一個新的終端,Bash就會運行。 您一般使用此文件來設置各類配置。 在這種狀況下,咱們設置了一個名爲WORKON_HOME的環境變量,以指向Python虛擬環境所在的目錄。 而後咱們從virtualenvwrapper加載任何須要的配置。

要更新你的〜/ .bashrc文件,只需使用標準的文本編輯器便可。 我會推薦使用nano,vim或emacs。 你也可使用圖形編輯器,但若是你剛剛開始使用,nano多是最容易操做的。

更簡單的解決方案是使用cat命令並徹底避免編輯器:

echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.bashrc
echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bashrc
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc

在編輯〜/ .bashrc文件後,咱們須要從新加載更改:

source ~/.bashrc

注意:只需爲咱們當前的shell會話調用一次.bashrc上的源代碼。 任什麼時候候咱們打開一個新的終端,.bashrc的內容將自動執行(包括咱們的更新)。

如今咱們已經安裝了virtualenv和virtualenvwrapper,下一步是實際建立Python虛擬環境 - 咱們使用mkvirtualenv命令執行此操做。

可是在執行這個命令以前,你須要作出一個選擇:你想使用Python 2.7仍是Python 3?

您選擇的結果將決定您在如下部分中運行的命令。

建立你的Python虛擬環境

若是您決定使用Python 2.7,請使用如下命令建立Python 2.7虛擬環境:

mkvirtualenv cv -p python2

不然,請使用此命令建立一個Python 3虛擬環境:

 mkvirtualenv cv -p python3

不管您決定使用哪一種Python命令,最終結果都是咱們已經建立了一個名爲cv(簡稱爲「計算機視覺」)的Python虛擬環境。

不管你喜歡什麼,你均可以命名這個虛擬環境(而且建立儘量多的Python虛擬環境),可是對於時間來講,我會建議堅持使用cv名稱,由於這是我將在整個剩餘部分使用的教程。

驗證您是否在「cv」虛擬環境中

若是你曾經重啓過你的Ubuntu系統, 註銷並從新登陸; 或者打開一個新的終端,您須要使用workon命令從新訪問您的cv虛擬環境。 下面是一個workon命令的例子:

workon cv

要驗證您是否在cv虛擬環境中,只需檢查您的命令行 - 若是您在提示符以前看到文本(cv),則說明您處於cv虛擬環境中:

Figure 1: Make sure you see the "(cv)" text on your prompt, indicating that you are in the cv virtual environment.

 

Figure 1: Make sure you see the 「(cv)」 text on your prompt, indicating that you are in the cv virtual environment.

不然,若是您沒有看到cv文本,那麼您不在cv虛擬環境中:

Figure 2: If you do not see the "(cv)" text on your prompt, then you are not in the cv virtual environment and need to run the "workon" command to resolve this issue. 

Figure 2: If you do not see the 「(cv)」 text on your prompt, then you are not in the cv virtual environment and need to run the 「workon」 command to resolve this issue.

要訪問cv虛擬環境,只需使用上述的workon命令。

將NumPy安裝到您的Python虛擬環境中

編譯OpenCV以前的最後一步是安裝NumPy,一個用於數值處理的Python包。 要安裝NumPy,請確保您處於cv虛擬環境中(不然NumPy將被安裝到Python的系統版本而不是cv環境中)。 從那裏執行如下命令:

pip install numpy

步驟#4:在Ubuntu 16.04上配置和編譯OpenCV

在這一點上,咱們已經安裝了全部必要的先決條件 - 咱們如今準備編譯和OpenCV!

但在此以前,請檢查您的提示(您應該看到前面的(cv)文本),而後仔細檢查您是否在cv虛擬環境中,若是沒有,請使用workon命令:

workon cv

確保您進入cv虛擬環境後,咱們可使用CMake來設置和配置咱們的版本:

cd ~/opencv-3.1.0/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \
    -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \
    -D BUILD_EXAMPLES=ON ..

上述命令將目錄更改成〜/ opencv-3.1.0,若是您一直關注本教程,那麼您將下載並取消存檔.zip文件。

注意:若是遇到與stdlib.h有關的錯誤:在本教程的cmake或make階段中沒有這樣的文件或目錄,您還須要在CMake中包含如下選項:-D ENABLE_PRECOMPILED_HEADERS = OFF。 在這種狀況下,我會建議刪除您的構建目錄,從新建立它,而後使用上述選項從新運行CMake。 這將解決stdlib.h錯誤。 感謝Carter Cherry和Marcin在評論部分指出了這一點!

在這個目錄中,咱們建立一個名爲build的子目錄並將其更改成它。 構建目錄是實際編譯將要發生的地方。

最後,咱們執行cmake來配置咱們的構建。

在咱們開始實際編譯OpenCV以前,請確保您檢查CMake的輸出!

爲此,向下滾動標題爲Python 2和Python 3的部分。

若是您正在使用Python 2.7支持在Ubuntu 16.04上編譯OpenCV,請確保Python 2部分包含解釋器,庫,numpy和包路徑的有效路徑。 你的輸出應該相似於個人下面:

Figure 3: Ensuring that Python 2.7 will be used when compiling OpenCV 3 for Ubuntu 16.04.

Figure 3: Ensuring that Python 2.7 will be used when compiling OpenCV 3 for Ubuntu 16.04.

檢查這個輸出,你能夠看到:

1.解釋器指向cv虛擬環境中的Python 2.7二進制文件。

2.庫指向Python 2.7庫(咱們在步驟#1的最後一步安裝)。

3.numpy值指向咱們在cv虛擬環境中的NumPy安裝。

4.最後,packages路徑指向lib / python2.7 / site-packages。 當與CMAKE_INSTALL_PREFIX結合使用時,這意味着在編譯OpenCV以後,咱們會在/usr/local/lib/python2.7/site-packages/中找到咱們的cv2.so綁定。

一樣,若是您使用Python 3支持編譯OpenCV 16.04,則須要確保您的Python 3部分與下面的代碼相似:

Figure 4: Validating that Python 3 will be used when compiling OpenCV 3 for Ubuntu 16.04.

Figure 4: Validating that Python 3 will be used when compiling OpenCV 3 for Ubuntu 16.04.

再次注意個人解釋器,庫,numpy和包路徑是如何被正確設置的。

若是在這些可變路徑中看不到cv虛擬環境,那幾乎能夠確定是由於在運行CMake以前,您不在cv虛擬環境中!

若是確實如此,只需調用workon cv訪問cv虛擬環境,而後從新運行上述的CMake命令。

假設你的CMake命令沒有任何錯誤退出,你如今能夠編譯OpenCV:

make -j4

-j開關控制編譯OpenCV時要使用的進程數量 - 您須要將此值設置爲機器上的處理器/內核數量。 就我而言,我有一個四核處理器,因此我設置了-j4。

使用多個進程可讓OpenCV更快地編譯; 然而,有些時候競賽條件受到打擊,編輯炸彈爆炸了。 雖然你真的不知道這是不是沒有不少之前的經驗編譯OpenCV的狀況下,若是你遇到了錯誤,個人第一個建議是運行make clean刷新構建,而後編譯只使用一個單一的 核心:

make clean
make

下面你能夠在Ubuntu 16.04上找到一個成功的OpenCV + Python編譯的屏幕截圖:

Figure 5: Successfully compiling OpenCV 3 for Ubuntu 16.04.

Figure 5: Successfully compiling OpenCV 3 for Ubuntu 16.04.

最後一步是在Ubuntu 16.04上實際安裝OpenCV 3:

sudo make install
sudo ldconfig

第5步:完成OpenCV安裝

你正在完成的路上,只需再走幾步,你的Ubuntu 16.04系統將所有使用OpenCV 3進行設置。

For Python 2.7:

運行sudo make install以後,您的Python 2.7綁定OpenCV 3如今應該位於/usr/local/lib/python-2.7/site-packages/中。 您可使用ls命令來驗證它:(爲完,待續..............)

ls -l /usr/local/lib/python2.7/site-packages/
total 1972
-rw-r--r-- 1 root staff 2016608 Sep 15 09:11 cv2.so

注意:在某些狀況下,您可能會發現OpenCV安裝在/usr/local/lib/python2.7/dist-packages而不是/usr/local/lib/python2.7/site-packages(note dist-packages vs 網站包)。 若是您的cv2.so綁定不在site-packages目錄中,請務必檢查dist-pakages。

最後一步是將咱們的OpenCV cv2.so綁定連接到Python 2.7的cv虛擬環境中:

cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so

 For Python 3.5:

運行sudo make install後,您的OpenCV + Python 3綁定應位於/usr/local/lib/python3.5/site-packages/中。 再次,您可使用ls命令驗證這一點:

ls -l /usr/local/lib/python3.5/site-packages/
total 1972
-rw-r--r-- 1 root staff 2016816 Sep 13 17:24 cv2.cpython-35m-x86_64-linux-gnu.so

自OpenCV 3發佈以來,我一直對這種行爲感到困惑,但因爲某種緣由,在編譯OpenCV和Python 3支持時,輸出cv2.so文件名是不一樣的。 實際的文件名可能會有所不一樣,但它應該相似於cv2.cpython-35m-x86_64-linux-gnu.so。

再次,我不知道爲何發生這種狀況,但這是一個很是簡單的解決方案。 咱們所須要作的就是重命名文件:

cd /usr/local/lib/python3.5/site-packages/
sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so

在將cv2.cpython-35m-x86_64-linux-gnu.so重命名爲cv2.so以後,咱們能夠將咱們的OpenCV綁定對接到Python 3.5的cv虛擬環境中:

cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so

步驟#6:測試你的OpenCV安裝

恭喜,您如今已經在您的Ubuntu 16.04系統上安裝了OpenCV 3!

驗證您的安裝是否正常運行:

1.打開一個新的終端。

2.執行workon命令來訪問cv Python虛擬環境。

3.嘗試導入Python + OpenCV綁定。

我已經演示瞭如何執行如下步驟:

cd ~
workon cv
python
Python 3.5.2 (default, Jul  5 2016, 12:43:10) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>>

正如你所看到的,我能夠將個人OpenCV綁定導入到個人Python 3.5 shell中。

下面是我使用本教程中概述的相同步驟並將OpenCV綁定導入Python 2.7外殼的屏幕截圖:

Figure 6: Ensuring that I can successfully import my Python + OpenCV bindings on Ubuntu 16.04.

Figure 6: Ensuring that I can successfully import my Python + OpenCV bindings on Ubuntu 16.04.

所以,不管您決定使用哪一種Python版本,只需按照本教程中詳述的步驟進行操做便可在Ubuntu 16.04系統上安裝OpenCV + Python。

一旦安裝了OpenCV,您能夠刪除opencv-3.1.0和opencv_contrib-3.1.0目錄(及其關聯的.zip文件):

cd ~
rm -rf opencv-3.1.0 opencv_contrib-3.1.0 opencv.zip opencv_contrib.zip

可是,運行這個命令時要當心! 你須要確保你已經在你的系統上正確安裝了OpenCV,而後再沿着這些目錄。 不然,您將須要從新啓動整個編譯過程!

接下來幹什麼?

恭喜!您如今在您的Ubuntu 16.04系統上安裝了全新的OpenCV - 我肯定您只是想利用您的安裝來構建一些出色的計算機視覺應用程序......

......但我也願意打賭,你剛剛開始學習計算機視覺和OpenCV,並可能感到有點困惑和不知所措,從哪裏開始。

就我我的而言,我是一個很好的學習榜樣的粉絲,因此,一個好的第一步是得到一些樂趣,並閱讀這篇博客文章,探討圖像/視頻中的貓。本教程旨在很是實用,並演示如何(快速)構建Python + OpenCV應用程序以檢測圖像中是否存在貓。

若是你真的對提升計算機視覺技能感興趣,你必定要看看個人書,實用Python和OpenCV +案例研究。個人書不只涵蓋計算機視覺和圖像處理的基礎知識,還教你如何解決真實世界的計算機視覺問題,包括圖像和視頻流中的人臉檢測,視頻中的對象跟蹤以及手寫識別。

curious_about_cv

所以,讓咱們在Ubuntu 16.04系統上安裝全新的OpenCV 3,以便於使用 - 只需單擊此處便可詳細瞭解可以使用實用Python和OpenCV解決的實際項目。

相關文章
相關標籤/搜索