Ubuntu 16.04: How to install OpenCV


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

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

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

 1 sudo apt-get update

2 sudo apt-get upgrade  

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

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

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

OpenCV是一個圖像處理和計算機視覺庫。 因此,OpenCV需要能夠從磁盤加載各種圖像文件格式,例如JPEG,PNG,TIFF等。為了從磁盤加載這些圖像,OpenCV實際上調用了其他圖像I / O庫,它們實際上有助於加載和解碼 處理。 我們在下面安裝必要的:

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

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

 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解決的實際項目。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM