阅读量:0
一、遇到的问题
莓派4B在使用官方的Camera Module 3摄像头时,无法通过opencv直接获取到图像,具体问题表现在opencv可以打开摄像头但是无法获取到图像信息,导致imshow等方法因无法获取图像数据进而报错,只能使用picamera2库进行图像的获取和和处理,对不熟悉picamera2库的同学不够友好;
[INFO]注意: 本教程的环境是树莓派4B+2023-05-03-raspios-bullseye-arm64镜像,不保证其他镜像是否可行。
二、为什么是picamera2?
树莓派官方提供的picamera2库是针对libcamera驱动提供的python库。
注意:Picamera2仅支持Raspberry Pi OS Bullseye 镜像
更多信息请访问
–官方PDF文档
https://datasheets.raspberrypi.com/camera/picamera2-manual.pdf
–微雪电子文档
https://www.waveshare.net/wiki/RPi_Camera_picamera2_Guide
三、准备工作
1.目录结构
2.树莓派摄像头状态
在安装好摄像头之后,不用通过sudo raspi-config打开摄像头,如果打开了会报错,最终状态应该如下图所示
四、使用步骤
1.安装picamera2
如果安装的过程较慢,应该进行树莓派换源使用国内进行进行安装和更新,具体过程请自行查找
sudo apt update sudo apt upgrade sudo apt install -y python3-picamera2
2.初始化picamera2
Picamera2_Img_et.py
from picamera2 import Picamera2 from libcamera import controls class Imget: def __init__(self): # 创建一个Picamera2对象的实例 self.cam = Picamera2() # 设置相机预览的分辨率 self.cam.preview_configuration.main.size = (640, 360) self.cam.preview_configuration.main.format = "RGB888" # 设置预览帧率 self.cam.preview_configuration.controls.FrameRate = 50 # 对预览帧进行校准 self.cam.preview_configuration.align() # 配置相机为预览模式 self.cam.configure("preview") # 设置相机控制参数为连续对焦模式(自动对焦) self.cam.set_controls({"AfMode": controls.AfModeEnum.Continuous}) # 启动相机 self.cam.start() def getImg(self): # 获取相机捕获的图像数组(numpy数组) frame = self.cam.capture_array() # 返回捕获的图像数组 return frame def __del__(self): self.cam.stop() self.cam.close()
3.树莓派4B安装python-opencv
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn opencv-python
4.使用opencv获取图像
opencv.py
import cv2 as cv # 导入OpenCV库 from Picamera2_Img_et import Imget # 自定义模块Imget中的类Imget getImg = Imget() # 创建Imget对象实例 while True: # 进入循环,持续运行 frame = getImg.getImg() # 调用Imget对象的getImg方法获取帧图像 cv.imshow('frame', frame) # 在窗口中显示帧图像,窗口名称为'frame' if cv.waitKey(1) & 0xFF == ord('q'): # 若按下的字符为'q'时退出循环 break cv.destroyAllWindows() # 销毁所有窗口
5.运行结果
总结
通过对picamera2获取图像的封装,就可以使用opencv对摄像进行操作,使用opencv的各种处理函数会更加的方便。有问题可以留言,一起解决。