樹莓派安裝openCV的過程及出現的問題的解決辦法
1.開啟Raspbain終端(Ctrl + Alt +t),
2.依次執行下列命令
//軟體源更新
sudo apt-get update
//升級本地所有安裝包,最新系統可以不升級,版本過高反而需要降級才能安裝
sudo apt-get upgrade
//升級樹莓派韌體,韌體比較新或者是Ubuntu則不用執行
sudo rpi-update
- 1
- 2
- 3
- 4
- 5
- 6
3.安裝構建OpenCV的相關工具:
//安裝build-essential、cmake、git和pkg-config
sudo apt-get install build-essential cmake git pkg-config
- 1
- 2
4.安裝常用影象工具包:
//安裝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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
5.安裝視訊I/O包(注意最後一個包的數字“4”後面是“L”):
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
- 1
6.安裝gtk2.0(樹莓派很可能下載錯誤,更換中科大或者清華源)
sudo apt-get install libgtk2.0-dev
- 1
優化函式包:
sudo apt-get install libatlas-base-dev gfortran
- 1
執行到這裡就把OpenCV的依賴包全部安裝好了
7.開始編譯OpenCV原始碼了(此過程非常漫長,大家可以做點其他的),請大家到https://github.com/opencv/opencv/releases 下載OpenCV的原始碼tar.gz格式,放到使用者目錄下(極可能會出現原始碼包在下載過程中被破壞)
gzip: stdin: unexpected end of file
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
解決:換個地址下載或者是用git工具clone到所需目錄下,git命令如下:(推薦大家使用)wget git clone https://github.com/opencv/opencv.git
- 1
- 2
補充:用git下載可能會遇到問題(沒有這個問題的此步可以跳過)
error:RPC fsiled;curl18 trsnsfer closed with outstanding data remaining
fatal:The remote end hung up unexpectedly
fatal:early EOF
fatal:index-pack failed.
解決辦法:
- git config --global http.postBuffer-524288000
- git config --list
git方式下載的資料夾名應該是opencv。
cd opencv
- 1
- 2
8.之後我們新建一個名為release的資料夾用來存放cmake編譯時產生的臨時檔案:
//新建release資料夾
mkdir release
//進入release資料夾
cd release
- 1
- 2
- 3
- 4
9.設定cmake編譯引數,安裝目錄預設為/usr/local:
//CMAKE_BUILD_TYPE是編譯方式,CMAKE_INSTALL_PREFIX是安裝目錄
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local ..
- 1
- 2
- 3
10.開始正式編譯過程:
//編譯
sudo make
//安裝
sudo make install
//更新動態連結庫
sudo ldconfig
- 1
- 2
- 3
- 4
- 5
- 6
11.opencv已經編譯完成,已經可以正常使用了,下面我提供一個Python語言的測試程式,用來測試OpenCV是否正常:
# -*- coding:utf-8 -*-
import cv2
import numpy as np
cv2.nameWindow("gray")
img = np.zeros((512,512),np.uint8)#生成一張空的灰度影象
cv2.line(img,(0,0),(511,511),255,5)#繪製一條白色直線
cv2.imshow("gray",img)#顯示影象
#迴圈等待,按q鍵退出
while True:
key=cv2.waitKey(1)
if key==ord("q"):
break
cv2.destoryWindow("gray")