最近因为项目需要,需要在树莓派4b上安装OpenCV, 网上的方法需要用到CMake和OpenCV源代码编辑,装了一上午还没成功。只好重头再来,换种方法,采用下面的方法只需半小时左右即可完成安装。
一、安装最新树莓派系统
1.下载最新的操作系统,我这里用的是2020-08-20-raspios-buster-armhf-full
初始设置中,地区选美国,语言选美式英语,勾选英语和美式键盘。
一、换镜像源
1. 打开配置文件进行修改
sudo nano /etc/apt/sources.list
将原先的源注释掉,换上清华源
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
2. 打开第二个配置文件
sudo nano /etc/apt/sources.list.d/raspi.list
将原先的源注释掉,换上清华源
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
二、连接启用摄像头
2.(可选,安装不成功再执行这一步)开机设置初始化项目,执行以下两个命令。(需要下载几百兆的文件,时间稍长)
sudo apt-get update
sudo apt-get upgrade
3.断电连接摄像头硬件,启动摄像头模块。
sudo raspi-config
选择Interfacing Options->P1 Camera,进行启用。
4.
重启系统
,输入如下命令即可进行拍照:
sudo raspistill -o 文件名.jpg
在树莓派的【开始】菜单中,选择【图像】【图像查看器】,可以打开上述文件。
三、安装OpenCV库
5.安装相关依赖库
sudo apt-get update
sudo apt-get install libjpeg-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libtiff5-dev
sudo apt-get install libqtgui4 libqt4-test
sudo apt-get install libjasper-dev
6.安装OpenCV
sudo pip3 install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
测试OpenCV
python3
import cv2
如提示如下错误,说明numpy库版本不正确
RuntimeError: module compiled against API version 0xe but this version of numpy is 0xd
解决方法:
pip3 install --upgrade -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com numpy
7.安装pyDes、PyInstaller
sudo pip3 install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
sudo pip3 install pyinstaller==4.5 -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
如提示PyInstaller Pre-Compiled
Bootloader
Not Found and Build Fails
git clone https://github.com/pyinstaller/pyinstaller
cd pyinstaller/bootloader
python3 ./waf distclean all
8.在树莓派的【开始】菜单中,选择【编程】【Thonny Python IDE】,执行如下代码
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
# get a frame
ret, frame = cap.read()
# show a frame
cv2.imshow("capture", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
#退出并拍照
cv2.imwrite("takephoto2.jpg", frame)
print("take Photo Ok")
break
cap.release()
cv2.destroyAllWindows()