文章目录
在 Ubuntu 下测试单目与双目相机:工具、步骤与问题排查全指南
本文将系统介绍如何在 Ubuntu 系统中测试 笔记本内置单目摄像头 以及 外接 USB 双目摄像头,包括识别设备、预览图像、采集图像对、排查图像异常等操作,适用于 vSLAM、VIO、双目深度感知等开发场景。
一、识别摄像头设备
查看当前连接的摄像头设备编号:
ls /dev/video*
推荐使用 v4l2-ctl
工具查看设备信息:
sudo apt install v4l-utils
v4l2-ctl --list-devices
示例输出:
Chicony USB2.0 Camera: Chicony (usb-0000:02:03.0-1):
/dev/video0
/dev/video1
USB Camera: USB Camera (usb-0000:02:03.0-2):
/dev/video2
/dev/video3
通常:
/dev/video0/1
:笔记本内置摄像头;/dev/video2/3
:USB 外接双目摄像头(左右目分别占一个设备,或左右拼接为一个设备)。
二、查看摄像头支持的分辨率与格式
v4l2-ctl --device=/dev/video0 --list-formats-ext
输出示例说明:
- 格式:
MJPG
(压缩)或YUYV
(无压缩) - 分辨率:常见有
640x480
、1280x720
、3840x1080
(双目拼接) - 帧率:如
30 fps
表示正常视频流支持
三、实时预览摄像头图像
方法 1:使用 ffplay
(命令行预览)
sudo apt install ffmpeg
# 单目摄像头
ffplay -f v4l2 -input_format mjpeg -video_size 640x480 -i /dev/video0
# 双目拼接流(如 1280x480 表示左右各 640x480)
ffplay -f v4l2 -input_format mjpeg -video_size 1280x480 -i /dev/video2
方法 2:使用 cheese
(图形界面预览)
sudo apt install cheese
cheese
可直接拍照、预览画面,适用于单摄。
四、使用 Python + OpenCV 测试图像采集
安装依赖:
pip install opencv-python
示例代码(读取并显示图像):
import cv2
cap = cv2.VideoCapture(0) # 修改为 2 可测试双目
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
while True:
ret, frame = cap.read()
if not ret:
print("读取失败")
break
cv2.imshow("Camera", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
双目拼接流的左右分割显示:
import cv2
cap = cv2.VideoCapture(2) # 双目拼接图像设备
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
while True:
ret, frame = cap.read()
if not ret:
print("读取失败")
continue
h, w, _ = frame.shape
left = frame[:, :w//2]
right = frame[:, w//2:]
cv2.imshow("Left", left)
cv2.imshow("Right", right)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
五、保存图像抓拍验证分辨率
使用 ffmpeg
拍照:
ffmpeg -f v4l2 -input_format mjpeg -video_size 640x480 -i /dev/video0 -frames 1 test.jpg
验证图像尺寸:
file test.jpg
# 输出应为:JPEG image data, 640 x 480
六、常见问题排查
问题现象 | 原因与建议 |
---|---|
图像下半部分绿屏 / 马赛克 | 摄像头 MJPEG 数据不规范、分辨率设置过高、USB 带宽不足 |
No JPEG data found 报错 |
FFmpeg 解码失败,尝试用 OpenCV 或切换为 YUYV 格式 |
摄像头编号 video2/3 不存在 |
摄像头未插好或虚拟机未正确绑定 USB 设备 |
虚拟机中视频异常 | 推荐在物理主机运行(虚拟机 USB 带宽或转发性能有限) |
七、总结与建议
- Ubuntu 支持通过
/dev/videoX
管理视频设备; - 推荐工具组合:
v4l2-ctl
(查看参数)、ffplay
(预览)、OpenCV
(自定义采集); - 双目拼接流需结合 OpenCV 分割左右图像;
- 若设备识别异常、绿屏、数据错位,建议在主机下排查并降低分辨率测试;
- 可搭配
ffmpeg
实现帧抓取验证相机有效性。