You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python OpenCV无法识别树莓派摄像头 打开设备报错排查

树莓派Python OpenCV摄像头调用报错排查

报错信息

运行OpenCV相关程序时抛出如下日志:

[ WARN:0@0.042] global /io/opencv/modules/videoio/src/cap_v4l.cpp (902) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
Traceback (most recent call last):
  File "/home/pi/Facial-Recgnition/app/test.py", line 11, in <module>
    cv2.imwrite("Image.jpg", frame)
cv2.error: OpenCV(4.6.0) /io/opencv/modules/imgcodecs/src/loadsave.cpp:801: error: (-215:Assertion failed) !_img.empty() in function 'imwrite'

报错核心:OpenCV无法通过索引打开V4L2路径下的/dev/video0摄像头设备,后续调用cv2.imwrite写入图片时触发空图像断言失败错误。

排查解决步骤

  • 硬件与系统开关检查
    先在终端执行ls /dev/video*,如果输出中没有/dev/video0,优先检查摄像头CSI/USB排线是否插紧,再执行sudo raspi-config,进入Interface Options分类,找到Camera选项设置为Enable,保存后重启树莓派再重新检测设备。
  • 摄像头占用排查
    执行sudo fuser /dev/video0,如果命令返回对应进程PID,说明摄像头被其他程序占用,执行sudo kill -9 替换为查到的PID终止占用进程后再运行程序。
  • OpenCV V4L2支持校验
    终端输入python3进入交互环境,依次执行以下代码:
    import cv2
    print(cv2.getBuildInformation())
    
    在输出内容的Video I/O板块下,查看V4L2条目状态,如果显示为NO,说明当前安装的OpenCV没有编译V4L2驱动支持,卸载现有版本后重新编译带V4L2参数的OpenCV即可。
  • 代码逻辑补全校验
    摄像头打开、帧读取环节必须加状态判断,不要直接对读取到的帧执行写入/处理操作,同时可以手动指定V4L2作为捕获后端,参考代码:
    import cv2
    # 指定设备索引0,明确指定V4L2后端
    cap = cv2.VideoCapture(0, cv2.CAP_V4L2)
    if not cap.isOpened():
        print("摄像头打开失败")
        exit()
    ret, frame = cap.read()
    # 确认帧读取成功再写入
    if ret:
        cv2.imwrite("Image.jpg", frame)
    else:
        print("帧读取失败")
    cap.release()
    
  • 访问权限修复
    普通用户默认无video设备访问权限时,执行sudo usermod -aG video $USER将当前用户加入video用户组,注销重新登录后权限生效。

内容的提问来源于stack exchange,提问作者TripleS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:24:28