文章出處

opencv安裝指南

用包管理器安裝

比如ubuntu下是apt-get,mac下是brew。(windows下或許用nuget?)以ubuntu下為例。

查看opencv相關的包

aptitude search opencv

執行安裝

發現有很多包。不妨安裝絕大多數:

sudo apt-get install libopencv-*
sudo apt-get install opencv-data python-opencv

編譯安裝

為什么編譯安裝

opencv有些功能放在opencv_contrib中了,即便用包管理器安裝了opencv_contrib,有些包還是不能用,一定要自行把opencvopencv_contrib一起編譯。

下載源碼

依然以ubuntu16.04為例。

opencv官網下載。或者用git:

mkdir -p ~/gitwhat      #自行建立的目錄
cd ~/gitwhat
git clone https://github.com/opencv/opencv --depth=1          #depth表示只下載最新commit的代碼,減少下載量。
git clone https://github.com/opencv/opencv_contrib --depth=1
cd opencv
vim compile.sh    #cmake編譯參數很多,寫到文件中方便些

編譯腳本

compile.sh內容如下:

#!/bin/bash
set -x
set -e

rm -rf build
mkdir -p build
cd build

LOG="../cmake.log"
rm $LOG

exec &> >(tee -a "$LOG")

cmake \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv-git-master \
-D WITH_CUDA=OFF \
-D WITH_VTK=OFF \
-D WITH_MATLAB=OFF \
-D BUILD_DOCS=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/chris/work/gitwhat/opencv_contrib/modules \
-D PYTHON2_EXECUTABLE=/usr/bin/python \
-D PYTHON3_EXECUTABLE=/usr/bin/python3 \
-D PYTHON_INCLUDE_DIR=/usr/include/python2.7 \
-D PYTHON_INCLUDE_DIR2=/usr/include/x86_64-linux-gnu/python2.7 \
-D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
-D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include/ \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3.5/dist-packages/numpy/core/include/ \
..

make -j8

make doxygen # 可選,用來編譯出documentation,存放在`<opencv_root>/build/doc/doxygen/html`

sudo make install #可選

其中,CMAKE_INSTALL_PREFIX表示make install的安裝路徑,可修改;OPENCV_EXTRA_MODULES_PATHopencv_contrib項目下的modules目錄,自行修改。

執行編譯腳本、解決3rdparty下載

執行編譯腳本:

chmod +x compile.sh
./compile.sh

發現往往卡在ippicv等第三方包的下載上(國內網絡你懂得)。通過查看相關的.cmake文件,發現是從github上的opencv_3rdparty項目下載的,這些下載地址有些需要改掉,下載第三方包后根據.cmake文件內容,重新壓縮、修改md5的hash值等。

這些下載的包放到<opencv_root>/.cache目錄下,并按照固定的規則命名。

以下是細節:

手動下載ippicv包

查看/3rdparty/ippicv/ippicv.cmake
此文件是要下載指定commit的opencv_3rdparty包的URL地址,并給出了驗證的md5sum值。

URL地址是有問題的,現在(2017.04.15)不能用raw.githutcontent.com開頭形式的URL下載東西了。

換用這個地址:

https://codeload.github.com/opencv/opencv_3rdparty/zip/81a676001ca8075ada498583e4166079e5744668

其中url最后一部分是commit的id

這樣下載完的是zip包,解壓它并壓縮為.tgz格式。算出它的md5sum值。重命名為md5sum-文件名的格式:

1469ff5ced054be500921d2d46278ef4-ippicv_linux_20151201.tgz

移動到/.cache/ippicv目錄下

手動下載protobuf包

查看opencv_contrib/modules/dnn/cmake/OpenCVFindLibProtobuf.cmake
此文件是要下載指定版本的protobuf-cpp。我這里是3.1版本的。它下載地址是:
https://github.com/google/protobuf/releases/download/v3.1.0/
這個地址會轉到aws的地址,所以用迅雷下載吧。這個md5sum不用換。

或者下載地址換用這種形式:

https://codeload.github.com/google/protobuf/zip/a428e42072765993ff674fda72863c9f1aa2d268

其中URL最后的commit是protobuf-cpp-3.1對應的commit號。可以試試看。(試了,不行,因該是因為下載的不是protobuf-cpp吧)

xfeatures包

和上面的包的方法類似。只不過放到.cache目錄下后,是把一個個的單個文件進行重命名,格式也是md5sum-文件名,記得對比.cmake文件中的hash值。

.cache目錄結構

➜  .cache git:(master) ✗ tree
.
├── ippicv
│   └── 1469ff5ced054be500921d2d46278ef4-ippicv_linux_20151201.tgz
├── protobuf
│   └── bd5e3eed635a8d32e2b99658633815ef-protobuf-cpp-3.1.0.tar.gz
├── tiny_dnn
│   └── adb1c512e09ca2c7a6faef36f9c53e59-v1.0.0a3.tar.gz
└── xfeatures2d
    ├── boostdesc
    │   ├── 0ae0675534aa318d9668f2a179c2a052-boostdesc_lbgm.i
    │   ├── 0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i
    │   ├── 202e1b3e9fec871b04da31f7f016679f-boostdesc_binboost_064.i
    │   ├── 232c966b13651bd0e46a1497b0852191-boostdesc_bgm_bi.i
    │   ├── 324426a24fa56ad9c5b8e3e0b3e5303e-boostdesc_bgm_hd.i
    │   ├── 98ea99d399965c03d555cef3ea502a0b-boostdesc_binboost_128.i
    │   └── e6dcfa9f647779eb1ce446a8d759b6ea-boostdesc_binboost_256.i
    └── vgg
        ├── 151805e03568c9f490a5e3a872777b75-vgg_generated_120.i
        ├── 7126a5d9a8884ebca5aea5d63d677225-vgg_generated_64.i
        ├── 7cd47228edec52b6d82f46511af325c5-vgg_generated_80.i
        └── e8d0dcd54d1bcfdc29203d011a797179-vgg_generated_48.i

6 directories, 14 files

編譯后的設定-環境變量

新編譯出來的cv2.so位于/usr/local/opencv-git-master/lib/cv2.so

要使用新編譯出來的cv2.so,刪除apt的python-opencv包,或者把cv2.so放到PYTHONPATH中。

sudo apt-get remove python-opencv
sudo ln -sf /usr/local/opencv-git-master/lib/python2.7/dist-packages/cv2.so /usr/lib/python2.7

mac下的compile.sh腳本

mac下裝caffe時候發現,系統自帶的python不靠譜用不了啊,brew的也不怎么能用,所幸有anaconda在。裝好anaconda后再brew從源碼裝boost和boost-python,再caffe。。

對應的opencv編譯腳本,改掉python相關的幾個路徑:

#!/bin/bash
set -x
set -e

LOG="../cmake.log"
touch $LOG
rm $LOG

exec &> >(tee -a "$LOG")

BUILD_ROOT=build

if [ -d $BUILD_ROOT ]; then
    rm -rf $BUILD_ROOT
fi
mkdir -p $BUILD_ROOT
cd $BUILD_ROOT


ANACONDA=/Users/tusdk/anaconda

cmake \
    -D CMAKE_BUILD_TYPE=Release \
    -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-git-master \
    -D WITH_CUDA=OFF \
    -D WITH_VTK=OFF \
    -D WITH_MATLAB=OFF \
    -D BUILD_DOCS=ON \
    -D OPENCV_EXTRA_MODULES_PATH=/Users/tusdk/work/opencv_contrib/modules \
    -D PYTHON2_EXECUTABLE=${ANACONDA}/bin/python \
    -D PYTHON_INCLUDE_DIR=${ANACONDA}/include/python2.7 \
    -D PYTHON_LIBRARY=${ANACONDA}/lib/libpython2.7.dylib \
    -D PYTHON2_NUMPY_INCLUDE_DIRS=${ANACONDA}/lib/python2.7/site-packages/numpy/core/include/ \
    ..

make -j8

make doxygen # 可選,用來編譯出documentation,存放在`<opencv_root>/build/doc/doxygen/html`

sudo make install

其他問題

opencv_world.so

編譯opencv_contrib時候發現沒有編譯出opencv_world.so

需要cmake開啟開關:

···
-D BUILD_opencv_world=ON
···

缺點:只生成一個opencv_world.so,其他的.so都沒有!


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()