树莓派4B使用opencv获取Camera Module 3摄像头图像(解决无法直接获取图像的问题)

一、遇到的问题

莓派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的各种处理函数会更加的方便。有问题可以留言,一起解决。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PrimeJr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值