opencv3.3 python2.7 linux子系統 樹莓派 編譯記錄
阿新 • • 發佈:2019-01-04
想在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 !