一、環境介紹
開發板:樹莓派4B
OpenCV版本: 3.4.9
操作系統:開發板原始自帶的32位操作系統
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux
pi@raspberrypi:~ $ cat /proc/version
Linux version 4.19.97-v7l+ (dom@buildbot) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611)) #1294 SMP Thu Jan 30 13:21:14 GMT 2020
二、編譯安裝OpenCV
2.1 下載OpenCV
OpenCV下載地址: https://opencv.org/releases/
我這裏下載的是:3.4.9版本
壓縮包的名稱: opencv-3.4.9.zip
操作樹莓派連接方式:使用windows遠程桌面連接。
遠程桌面不會看這裏:https://blog.csdn.net/xiaolong1126626497/article/details/106099194
2.2 安裝cmake
編譯OpenCV源碼需要使用cmake,爲了方便編譯,這裏下載安裝cmake圖像界面版本,方便可視化配置。
命令行執行的命令如下:
sudo apt-get install cmake
sudo apt install cmake-qt-gui
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
2.3 編譯前說明
樹莓派4B本身的空間不太夠用,我這裏是外插了一張16GB的SD-通過USB讀卡器接入,並在PC機上將這張SD卡格式化成ext4文件系統,在樹莓派上解壓編譯OpenCV源碼都在這張SD卡空間上進行。
注意: 一定要ext4文件系統,不能是FAT或者NTFS之類的文件系統。
2.4 編譯配置OpenCV源碼
這一步執行完要沒有報錯才行,也就是界面上不能報錯,有錯誤就根據提示解決錯誤。
執行完第2步之後,就關閉軟件,進入到第編譯目錄下,進行編譯安裝。
pi@raspberrypi:/media/pi/sdcard/work/opencv-3.4.9/Build $cd /media/pi/sdcard/work/opencv-3.4.9/Build
pi@raspberrypi:/media/pi/sdcard/work/opencv-3.4.9/Build $make && make install
編譯成功之後,將生成的庫文件和頭文件全部拷貝到/use目錄下一份。
2.5 測試OpenCV : 使用g++編譯示例代碼
在OpenCV的samples/cpp/example_cmake 目錄下,有一份測試示例代碼,效果是打開攝像頭。
pi@raspberrypi:/media/pi/sdcard/work/opencv-3.4.9/samples/cpp/example_cmake $ g++ example.cpp -lopencv_calib3d -lopencv_objdetect -lopencv_core -lopencv_photo -lopencv_dnn -lopencv_shape -lopencv_features2d -lopencv_stitching -lopencv_flann -lopencv_superres -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_imgproc -lopencv_videostab -lopencv_ml
pi@raspberrypi:/media/pi/sdcard/work/opencv-3.4.9/samples/cpp/example_cmake $
pi@raspberrypi:/media/pi/sdcard/work/opencv-3.4.9/samples/cpp/example_cmake $ ./a.out
要測試這份代碼,可以先找一個USB攝像頭插在樹莓派4B的USB口上。
2.6 測試python的OpenCV模塊
進入python3的命令行,導入cv2模塊,查看OpenCV版本。
python2 也是正常的。
2.7 使用python調用OpenCV模塊,打開電腦攝像頭
import numpy as np
import cv2
#調用筆記本內置攝像頭,所以參數爲0,如果有其他的攝像頭可以調整參數爲1,2
cap=cv2.VideoCapture(0)
while True:
#從攝像頭讀取圖片
sucess,img=cap.read()
#轉爲灰度圖片
#gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#顯示攝像頭,背景是灰度。
#cv2.imshow("img",gray)
cv2.imshow("img",img) #顯示彩圖
#保持畫面的持續。
k=cv2.waitKey(1)
if k == 27:
#通過esc鍵退出攝像
cv2.destroyAllWindows()
break
elif k==ord("s"):
#通過s鍵保存圖片,並退出。
cv2.imwrite("image2.jpg",img)
cv2.destroyAllWindows()
break
#關閉攝像頭
cap.release()
下面公衆號裏全套單片機、QT、C、C++基礎教程、歡迎大家關注。