安裝opencv
說(shuō)明:
硬件:raspberry 3B
OpenCV:3.4.1
SD卡剩余空間至少保證10G以上
本教程是連帶opencv_contrib的編譯方式欢搜,帶opencv_contrib的編譯時(shí)間會(huì)更長(zhǎng)一些,大概6-7小時(shí)灼捂,如果是3b+的話更快一些池户,也要大概4-5小時(shí)咏雌。
另,大家編譯的時(shí)候一定要用質(zhì)量好的電源校焦,防止編譯時(shí)因?yàn)樘濍娭貑⒒蛘邿龎臉漭伞?/p>
為什么裝OpenCV_contrib
OpenCV_contrib庫(kù)中包括了人臉識(shí)別赊抖、matlab調(diào)用、RGB加工寨典、深層神經(jīng)網(wǎng)絡(luò)等內(nèi)容氛雪,顯然opencv異常強(qiáng)大。官方文檔展示了庫(kù)的完整內(nèi)容凝赛。
-
安裝CMake等編譯openCV源碼的工具
sudo apt-get install build-essential cmake pkg-config
-
安裝幾種常見格式的圖像操作的包注暗,方便我們能從硬盤上讀取不同格式的圖像
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
-
同樣的,我們也需要視頻操作的包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
-
下面安裝gtk2.0(樹莓派很可能下載錯(cuò)誤墓猎,更換中科大或者清華源即可捆昏,ubuntu有可能出現(xiàn)包版本過(guò)高的情況,需要將依賴包降級(jí)安裝)
sudo apt-get install libgtk2.0-dev
-
優(yōu)化函數(shù)包
sudo apt-get install libatlas-base-dev gfortran
執(zhí)行到這里就把OpenCV的依賴包全部安裝好了毙沾,之后要開始編譯OpenCV源代碼了骗卜,請(qǐng)大家用wget工具下載到用戶目錄下(源碼要放在有執(zhí)行權(quán)限的位置,不是安裝位置)左胞,命令如下:
-
下載OpenCV
wget -O opencv-3.4.1.zip https://github.com/Itseez/opencv/archive/3.4.1.zip
-
解壓OpenCV
unzip opencv-3.4.1.zip
-
下載OpenCV_contrib庫(kù):
wget -O opencv_contrib-3.4.1.zip https://github.com/Itseez/opencv_contrib/archive/3.4.1.zip
-
解壓OpenCV_contrib庫(kù):
unzip opencv_contrib-3.4.1.zip
找到你下載的源碼文件夾并打開寇仓,tar.gz解壓后文件夾名應(yīng)該是opencv-3.4.1(版本號(hào)可能會(huì)變化),git方式下載的文件夾名應(yīng)該是opencv烤宙。
-
打開源碼文件夾遍烦,這里以我修改文章時(shí)最新的3.4.1為例
cd opencv-3.4.1
-
之后我們新建一個(gè)名為release的文件夾用來(lái)存放cmake編譯時(shí)產(chǎn)生的臨時(shí)文件:
mkdir release
-
進(jìn)入release文件夾
cd release
-
設(shè)置cmake編譯參數(shù),安裝目錄默認(rèn)為/usr/local躺枕,剛才注意參數(shù)名服猪、等號(hào)和參數(shù)值之間不能有空格,但每行末尾“\”之前有空格拐云,參數(shù)值最后是兩個(gè)英文的點(diǎn):
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.1/modules \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D BUILD_EXAMPLES=ON ..
- CMAKE_BUILD_TYPE是編譯方式
- CMAKE_INSTALL_PREFIX是安裝目錄
- OPENCV_EXTRA_MODULES_PATH是加載額外模塊
- INSTALL_PYTHON_EXAMPLES是安裝官方python例程
-
BUILD_EXAMPLES是編譯例程(這兩個(gè)可以不加罢猪,不加編譯稍微快一點(diǎn)點(diǎn),想要C語(yǔ)言的例程的話叉瘩,在最后一行前加參數(shù)INSTALL_C_EXAMPLES=ON \)
之后開始正式編譯過(guò)程(如果之前一步因?yàn)榫W(wǎng)絡(luò)問題導(dǎo)致cmake下載缺失文件失敗的話膳帕,可以嘗試使用手機(jī)熱點(diǎn),并將release文件夾刪除掉薇缅,重新創(chuàng)建release文件夾并cmake):
-
以管理員身份編譯 (需要時(shí)間大概7個(gè)小時(shí),耐心等待吧)
sudo make
-
安裝
sudo make install
-
更新鏈接庫(kù)
sudo ldconfig
-
到這里危彩,OpenCV的編譯完成攒磨,已經(jīng)可以正常使用了,下面我提供一個(gè)Python語(yǔ)言的測(cè)試程序恬砂,用來(lái)測(cè)試OpenCV是否正常:
# -*- coding:utf-8 -*- import cv2 import numpy as np cv2.namedWindow("gray") img = np.zeros((512,512),np.uint8)#生成一張空的灰度圖像 cv2.line(img,(0,0),(511,511),255,5)#繪制一條白色直線 cv2.imshow("gray",img)#顯示圖像 #循環(huán)等待咧纠,按q鍵退出 while True: key=cv2.waitKey(1) if key==ord("q"): break cv2.destoryWindow("gray")
Python3 調(diào)用OpenCV
還有大家注意,官方并沒有給Python3的支持泻骤,所以大家要用python的話漆羔,先用Python2吧。
-
如果要用python3的話可以使用需要安裝python3支持的opencv狱掂。
sudo pip3 install opencv-python sudo pip3 install opencv-contrib-python
遇到錯(cuò)誤
缺少libhdf5
pi@raspberrypi:~/Desktop $ sudo python opencv.py
Traceback (most recent call last):
File "opencv.py", line 1, in <module>
import cv2
File "/usr/local/lib/python3.5/dist-packages/cv2/__init__.py", line 3, in <module>
from .cv2 import *
ImportError: libhdf5_serial.so.100: cannot open shared object file: No such file or directory
![image.png](https://upload-images.jianshu.io/upload_images/6540285-a5d6cab5198b4e2f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 安裝下面依賴
sudo apt-get update
sudo apt-get install libhdf5-dev libhdf5-serial-dev
缺少libQtGui.so
-
錯(cuò)誤信息
Traceback (most recent call last): File "opencv.py", line 1, in <module> import cv2 File "/usr/local/lib/python3.5/dist-packages/cv2/__init__.py", line 3, in <module> from .cv2 import * ImportError: libQtGui.so.4: cannot open shared object file: No such file or directory
-
安裝依賴
sudo apt-get update sudo apt install libqtgui4
成功導(dǎo)入cv3
- 打印信息:
pi@raspberrypi:~/Desktop $ python
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>>