Ubuntu下安裝OpenCV

寫在最前面

現在已經可以用pip install opencv-python安裝新版opencv-3.2.0,因此其實不需要看本教程了。

下載OpenCV源碼

好像pip install的OpenCV版本都比較低,而且我嘗試的時候報錯,因此我用了“正統“的方式,即下載源碼進行編譯安裝。
opencv-3.2.0.zip下載地址

安裝依賴工具

我百度到了一個教程Linux平臺上安裝OpenCV

安裝cmake

sudo apt-get install cmake

安裝關聯庫

sudo apt-get install python-dev python-opencv python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

編譯OpenCV源碼

最好將OpenCV-3.2.0.zip移動到用戶主目錄下進行編譯:
mv [OpenCV-3.2.0.zip存放路徑] ~/opencv_3.2.0.zip
unzip opencv_3.2.0.zip
cd opencv-3.2.0
mkdir release
cd release

執行cmake

這裏出現了一點小問題。第一次編譯的時候,我沒有workon在virtualenv的虛擬環境下,因此最終make install之後,cv2.so出現在了/usr/local/lib/python2.7/dist-packages文件夾內,即真實python環境裏。然而我用的python環境是虛擬環境裏,且版本問3.5.1, 因此我擔心python版本不符合就workon後重新安裝了一遍,結果仍然是在/usr/local/lib/python2.7/dist-packages中。原因是cmake的時候沒有指定要用的python interpreter,而編譯的結果是與interpreter有關的。並且要注意,make install之後要把cv2.so link到虛擬環境的site-packages文件夾內

cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON ..

注意,terminal中的輸出有這麼幾行:

– Python 2:
– Interpreter: /usr/bin/python2.7 (ver 2.7.12)
– Libraries: /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.12)
– numpy: /usr/local/lib/python2.7/dist-packages/numpy/core/include (ver 1.12.1)
– packages path: lib/python2.7/dist-packages

– Python 3:
– Interpreter: /home/elijha/.virtualenvs/virtualenv-py3/bin/python3 (ver 3.5.1)

– Python (for build): /usr/bin/python2.7

我想用的是虛擬環境中的python3,則運行:

cmake \
-D PYTHON_DEFAULT_EXECUTABLE=$HOME/.virtualenvs/virtualenv-py3/bin/python3 \
-D PYTHON_INCLUDE_DIRS=\$HOME/.virtualenvs/virtualenv-py3/include/python3.5m \
-D PYTHON_EXECUTABLE=\$HOME/.virtualenvs/virtualenv-py3/bin/python3 \
-D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON ..

此時的輸出爲:

– Python 2:
– Interpreter: NO

– Python 3:
– Interpreter: /home/elijha/.virtualenvs/virtualenv-py3/bin/python3 (ver 3.5.1)

– Python (for build): /home/elijha/.virtualenvs/virtualenv-py3/bin/python

然而這裏雖然Python (for build)改過來了,但是對應的interpreter下並沒有Libraries、numpy、packages path,因此我不確定能不能成功。因爲發現了pip install opencv-python這條命令,本篇文章完全基本失去了意義(微笑)。

具體含義我也不懂。接着出現了幾個問題:

問題1:qmake: could not exec ‘/usr/lib/x86_64-linux-gnu/qt4/bin/qmake’: No such file or directory

這個的含義是,編譯的過程中沒有找到qmake。我進入了qmake: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake'這個目錄,發現確實沒有qmake這個東西。於是我安裝了qt4-qmake:
sudo apt-get install qt4-qmake

問題2:下載ippicv_linux_20151201超級慢

這個問題應該是GFW的原因。我掛代理強行以幾KB/S的速度下載了ippicv_linux_20151201.tgz
(參考: OpenCV 3.1下載 ippicv_linux_20151201失敗
然後就是要把ippicv_linux_20151201.tgz移動到OpenCV的文件夾裏,這樣它在編譯的時候找到該文件就不會下載了。(下列代碼注意修改對應路徑!)

ipp_file=~/ippicv_linux_20151201.tgz
ipp_hash=$(md5sum $ipp_file | cut -d” ” -f1) //生成.tgz的hash
ipp_dir=/home/elijha/opencv-3.2.0/3rdparty/ippicv/downloads/linux-$ipp_hash
mkdir -p $ipp_dir
cp $ipp_file $ipp_dir

這段代碼最終就是在/home/elijha/opencv-3.2.0/3rdparty/ippicv/downloads目錄裏生成了linux-808b791a6eac9ed78d32a7666804320e並且把ippicv_linux_20151201.tgz考進去。

重新編譯OpenCV

cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON ..

上面每條命令的具體含義我也不懂。看了多個教程,cmake的參數都不一樣。另外有兩個版本寫在這裏僅作記錄:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_EXAMPLES=ON ..

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

(大概30s)

make -j $(nproc) 1// $(nproc)是返回系統處理器數目,從而使得make命令使用全部處理器來加速運行

(大概要40min~1hour)

sudo make install

添加庫路徑:

sudo /bin/bash -c ‘echo “/usr/local/lib” > /etc/ld.so.conf.d/opencv.conf’

這句似乎不需要執行,因爲在libc.conf文件中有相同的內容1

更新系統庫:

sudo ldconfig

製作cv2.so的軟鏈接:

ln -s /usr/local/lib/python2.7/site-packages/cv2.so /home/elijha/.virtualenvs/virtualenv-py3/lib/python3.5/site-packages


寫在最後

幾個編譯opencv源碼的教程:
Installation in Linux
Install OpenCV-Python in Fedora

另外,如果在import cv2的時候出現了錯誤undefined symbol: PyCObject_Type
那麼可能是編譯的時候出現了問題,我這裏出現過,原因十有八九就是我編譯的時候選錯了interpreter(把3.X選成了2)

結束語:

編譯的過程花了我一個下午,最終編譯出來的cv2.so在import的時候依然報錯,原因就是我沒有指定要用的python interpreter。而在晚上的時候我發現pip install opencv-python可以安裝最新版的opencv了,因而所有cmake、make、make install都沒有了意義……萬幸,已經可以用了。

發佈了28 篇原創文章 · 獲贊 13 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章