1. 程式人生 > >opencv3.3 python2.7 linux子系統 樹莓派 編譯記錄

opencv3.3 python2.7 linux子系統 樹莓派 編譯記錄

想在window子系統linux終端上編譯安裝opencv3.3.0,於是搜尋各方面教程,折騰了兩天,總算是大概瞭解瞭如何編譯安裝,記錄於此文,或許各位道友可以有所借鑑
最近又嘗試在樹莓派上編譯該環境,走了很多彎路,需要配置專用源,以及一些依賴安裝簡化

下載並解壓

wget https://codeload.github.com/opencv/opencv/tar.gz/3.3.0
tar -xvf xxxxx.gz
wget https://codeload.github.com/opencv/opencv_contrib/tar.gz/3.3.0
tar -xvf xxxxx.gz

- 安裝依賴

從各個網站參考了一些依賴檔案,並根據cmake時缺少的一些依賴整合如下:

//////////////////////////////
//這是win10下的子系統ubuntu終端使用的依賴
sudo apt-get install \ 
    libopencv-dev \ 
    build-essential \ 
    checkinstall \ 
    cmake \ 
    pkg-config \ 
    yasm \ 
    libjpeg-dev \ 
    libpng-dev \ 
    libgphoto2-dev \ 
    libtiff5-dev \ 
    libjasper-dev \ 
    libavcodec-dev
\ libavformat-dev \ libwebp-dev \ libswscale-dev \ libdc1394-22-dev \ libxine2-dev \ libgstreamer0.10-dev \ libgstreamer-plugins-base0.10-dev \ libv4l-dev \ python-dev \ python-numpy \ libtbb-dev \ libqt4-dev \ libgtk2.0-dev \ libfaac-dev
\ libmp3lame-dev \ libopencore-amrnb-dev \ libopencore-amrwb-dev \ libtheora-dev \ libvorbis-dev \ libxvidcore-dev \ x264 \ v4l-utils \ ffmpeg \ gstreamer-plugins-base-devel \ qt5-default //////////////////////////////////////// //下面這是樹莓派安裝依賴用到的 //注意需要配置專用的正確的源 不同於普通linux系統發行版本的源配置!!!!!!!!!! sudo vim /etc/apt/sources.list deb http://mirrors.aliyun.com/raspbian/raspbian/ stretch main contrib non-free rpi sudo apt-get update // 安裝build-essential、cmake、git和pkg-config sudo apt-get install build-essential cmake git pkg-config // 安裝jpeg格式影象工具包 sudo apt-get install libjpeg8-dev // 安裝tif格式影象工具包 sudo apt-get install libtiff5-dev // 安裝JPEG-2000影象工具包 sudo apt-get install libjasper-dev // 安裝png影象工具包 sudo apt-get install libpng12-dev //再安裝視訊I/O包(注意最後一個包的數字“4”後面是“L”): sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev //下面安裝gtk2.0(樹莓派很可能下載錯誤,更換中科大或者清華源即可,ubuntu有可能出現包版本過高的情況,需要將依賴包降級安裝): sudo apt-get install libgtk2.0-dev //優化函式包: sudo apt-get install libatlas-base-dev gfortran

- cmake生成makefile

cd opencv3.3.0
mkdir build
cd build 
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-3.3.0/modules \
 -D BUILD_EXAMPLES=ON ..

注意!生成makefile時要注意看cmake執行過程 可能會提示某些依賴找不到 就去檢視能不能使用apt-get install xxx 把缺少的依賴補上
然後注意cmake執行最後提示成功或者失敗!
我遇到以下兩種:

//失敗
-- Configuring incomplete, errors occurred!
See also "/home/walker/opencv-3.3.0/build/CMakeFiles/CMakeOutput.log".
See also "/home/walker/opencv-3.3.0/build/CMakeFiles/CMakeError.log".
//大概正常 即可執行下一步驟 後面出任何問題都得回頭看是不是這裡有問題
-- Configuring done
-- Generating done 
-- Build files have been written to: /home/walker/opencv-3.3.0/build
cd opencv3.3.0
mkdir build
cd build ##在解壓的opencv3.3.0下面新建build目錄存放編譯資訊
cmake -D CMAKE_BUILD_TYPE=RELEASE \ ##編譯release版本 '\'是換行的意思 因為這一段程式碼是一條命令
 -D CMAKE_INSTALL_PREFIX=/usr/local \ ##安裝目錄 預設
 -D INSTALL_C_EXAMPLES=ON \ ##c模組 不需要則可以不要該行
 -D INSTALL_PYTHON_EXAMPLES=ON \ ##python模組
 -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules \ ##額外模組 修改為下載的opencv_contrib所在路徑 或者不要這個引數
 -D BUILD_EXAMPLES=ON .. ##注意最後有兩個點 表示編譯的原資料夾為當前路徑的父目錄 

- make

sudo make -j4
sudo make -j4 ##-j4表示使用4核心?還是4執行緒?或者4程序同時併發編譯來著 可以不寫
  • make install 安裝
sudo make install 
// 更新動態連結庫
sudo ldconfig 

- 配置python 模組匯入

這個配置就是 讓python能夠找到這個模組
根據官方Fedora安裝教程有兩種方式 任選其一
需要注意:以下路徑可能因為系統版本不同 python安裝路徑不同 cmake編譯配置不同 而變動 需要確認路徑並修改

方式1: 複製cv2.so

sudo mv /usr/local/lib/python2.7/site-packages/cv2.so /usr/lib/python2.7/site-packages

方式2:新增環境變數

export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages

引入python模組cv2.so的實際解決方案

然而,實際上在方式1和2中根本找不到cv2.so檔案,後面找到一個靠譜的解釋,
在build目錄下尋找lib目錄裡的cv2.so,這個是python需要的,將其拷貝到python的庫目錄裡。一般情況下是在“/usr/local/lib/python2.7/dist-packages”裡。

路徑/opencv-3.3.0/build/lib/cv2.so
sudo cp lib/cv2.so /usr/local/lib/python2.7/dist-packages/

測試

python
import cv2
報錯!!!!!!!!!!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: libopencv_reg.so.3.3: cannot enable executable stack as shared object requires: Invalid argument
sudo apt-get install execstack
sudo execstack -c /usr/local/lib/libopencv_*

python
import cv2
'3.3.0'

Ok !