树莓派Lite系统使用opencv无法调用CSI摄像头

前言

由于最近在使用树莓派时,通过python使用opencv库调用摄像头的时候总是读取到空图像,但是设备列表里可以检查到video0,调用也没报错,所以仔细阅读了官方文档,并在网上查阅了相关资料,终于解决了问题。

本文中所使用的系统是目前官方最新的于2022-04-04发布的Raspberry Pi OS Lite(32-bit) Bullseye,树莓派型号为zero 2w,摄像头为OV5640模组。

在这里贴出树莓派官网的摄像头模块文档链接,想更全面的了解摄像头使用的小伙伴可以前往阅读。

一、问题起因

从树莓派官方文档中可以看到,Bullseye以后的Raspberry Pi OS 将仅包含libcamera库,不再包含传统的Raspicam库。
在这里插入图片描述
使用官方提供的libcamera-app测试,通过以下指令可以获取到摄像头拍摄的照片:

libcamera-jpeg -o test.jpg

这代表摄像头可以被设备读取,但是使用opencv调用摄像头读取图像并存储时,程序会报错图像为空。

使用指令

vcgencmd get_camera

返回

supported=0 detected=0

无法识别到硬件摄像头。

我猜测就是因为使用了新系统libcamera库,所以导致opencv无法调用摄像头获取图像。

二、解决方案

1.安装Raspicam摄像头库

在终端运行以下指令:

cd ~
sudo apt install cmake
git clone https://github.com/raspberrypi/userland
cd userland
./buildme
sudo cp build/bin/* /bin/

2.修改config.txt文件

config文件位于TF卡根目录,即/boot中。

在config.txt文件中注释以下语句(原本没有#号):

#camera_auto_detect=1
#dtoverlay=vc4-kms-v3d

在[all]下方添加以下语句:

dtoverlay=vc4-fkms-v3d
start_x=1

保存后重启树莓派:

sudo reboot

3.测试摄像头

再次使用指令

vcgencmd get_camera

返回

supported=1 detected=1

摄像头已可以被检测到

使用opencv测试,可以正常拍摄照片。

总结

尽管树莓派官方声称libcamera具有众多优点,但是仍然存在不少bug,所以官方也开放了旧版库的安装渠道,如果在使用摄像头方面存在无法解决的bug,可能选择更稳定的Raspicam不失为一个节省时间好办法。

如果本文存在问题,欢迎同学们在评论区指出,也可以私信我。

猜你喜欢

转载自blog.csdn.net/opklnmiojkbn/article/details/124654469