跳到主要内容

3.1.3 Python 使用 USB 相机

硬件连接

查看设备号

输入: ls /dev/video*,输出如下:

拔掉相机,再次输入 ls /dev/video*

可以确认设备号为 /dev/video20/dev/video21 ,对于一般USB相机,使用数值较小的设备号即可,本示例中为 /dev/video20

或者使用 v4l2 的工具查看

终端输入:v4l2-ctl --list-devices

出现如下输出:

使用 v4l2-ctl -d /dev/video20 --all 查看 /dev/video20 的详细信息

输出带有 Format Video Capture 字段一般是用于视频帧捕获的节点

使用 v4l2-ctl -d /dev/video21 --all 查看 /dev/video21 的详细信息

出现:UVC Payload Header Metadata 捕获接口 —— 即 视频元数据捕获接口,它不用于视频图像帧本身

创建虚拟环境

python3 -m venv ~/test1
source ~/test1/bin/activate
pip install opencv-python

捕获并显示

示例代码:

import cv2

# 打开摄像头,0 是默认设备编号,如有多个摄像头可改为 1、2 等
cap = cv2.VideoCapture('/dev/video20')

# 检查是否成功打开
if not cap.isOpened():
print("无法打开摄像头")
exit()

while True:
# 读取一帧图像
ret, frame = cap.read()
if not ret:
print("无法接收图像,退出...")
break

# 显示图像
cv2.imshow('USB Camera', frame)

# 按下 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break

# 释放资源
cap.release()
cv2.destroyAllWindows()

保存为 opencv_test.py

在虚拟环境内执行:

python opencv_test.py

注意 VideoCapture() 里面的设备号要使用 /dev/video20,不建议直接使用数字 20