1. 车载摄像头接入与实时预览
任务目标
在车载设备上接入一路摄像头,采集视频流并在本地窗口实时预览,确认设备节点、驱动与显示链路可用。本案例以 Linux/V4L2 环境为例,用 OpenCV 打开摄像头设备并逐帧显示,按 q 退出。
环境与依赖
- Linux 车载平台,摄像头已生成设备节点(如
/dev/video0)。 - Python 3 + OpenCV:
pip install opencv-python。 - 确认设备存在:
ls /dev/video*;查看支持格式:v4l2-ctl --device=/dev/video0 --list-formats-ext。
采集与预览链路
完整实现
import cv2
import sys
DEVICE = "/dev/video0" # 车载摄像头设备节点
WIDTH, HEIGHT = 1280, 720
def main():
cap = cv2.VideoCapture(DEVICE, cv2.CAP_V4L2)
if not cap.isOpened():
print(f"[ERROR] 无法打开摄像头 {DEVICE}")
sys.exit(1)
# 请求分辨率(驱动可能返回最接近的可用值)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)
real_w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
real_h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
print(f"[INFO] 已打开 {DEVICE} 分辨率={real_w}x{real_h} FPS={fps:.1f}")
frames = 0
while True:
ok, frame = cap.read()
if not ok:
print("[WARN] 读取帧失败,退出")
break
frames += 1
cv2.putText(frame, f"frame:{frames}", (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0), 2)
cv2.imshow("Car Camera Preview", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
print(f"[INFO] 共预览 {frames} 帧")
if __name__ == "__main__":
main()
运行与验证
- 运行:
python3 preview.py。 - 观察终端是否打印
[INFO] 已打开 ...,窗口是否出现实时画面。 - 画面左上角帧计数持续增长,说明采集与显示链路正常。
- 按
q退出,终端打印累计帧数。
通过条件:窗口能稳定显示实时画面且帧计数递增;若打印 [ERROR] 无法打开摄像头,检查设备节点、权限(sudo usermod -aG video $USER)或更换 DEVICE 编号。