在 Ubuntu 下测试单目与双目相机
文章目录
- 在 Ubuntu 下测试单目与双目相机:工具、步骤与问题排查全指南
- 一、识别摄像头设备
- 查看当前连接的摄像头设备编号:
- 推荐使用 `v4l2-ctl` 工具查看设备信息:
- 示例输出:
- 二、查看摄像头支持的分辨率与格式
- 输出示例说明:
- 三、实时预览摄像头图像
- 方法 1:使用 `ffplay`(命令行预览)
- 方法 2:使用 `cheese`(图形界面预览)
- 四、使用 Python + OpenCV 测试图像采集
- 安装依赖:
- 示例代码(读取并显示图像):
- 双目拼接流的左右分割显示:
- 五、保存图像抓拍验证分辨率
- 六、常见问题排查
- 七、总结与建议
在 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/video1USB 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 cv2cap = 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("读取失败")breakcv2.imshow("Camera", frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()
双目拼接流的左右分割显示:
import cv2cap = 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("读取失败")continueh, w, _ = frame.shapeleft = frame[:, :w//2]right = frame[:, w//2:]cv2.imshow("Left", left)cv2.imshow("Right", right)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.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
实现帧抓取验证相机有效性。