奥比中光 Gemini 336L在Ubuntu系统下利用VScode来读取图像数据存储到指定位置
时间: 2025-07-20 09:20:23 浏览: 3
<think>我们已知:用户想在Ubuntu系统下使用VSCode开发环境读取奥比中光Gemini 336L设备的图像数据(包括深度图和彩色图),并存储到指定路径。
根据引用[3]中提供的代码示例,我们可以使用openni2库和OpenCV来实现。但注意,引用[3]的代码是针对Gemini 2L型号的,而用户使用的是Gemini 336L,不过由于同属奥比中光系列,且都支持OpenNI2,因此代码应该类似,但可能需要调整分辨率等参数。
步骤:
1. 环境配置:安装必要的库(openni2, opencv-python, numpy)
2. 初始化设备并创建深度流和彩色流(注意:引用[3]中使用了单独的cv2.VideoCapture来获取彩色图,但奥比中光相机通常支持通过OpenNI2同时获取深度和彩色图,因此我们可以使用OpenNI2的彩色流)
3. 循环读取深度帧和彩色帧,并保存到指定路径。
注意:Gemini 336L的分辨率可能是640x480,但具体需要查看设备文档。我们这里假设与引用[3]相同(480p)。
我们修改引用[3]的代码,使用OpenNI2同时获取深度和彩色图,并保存图像。
具体步骤:
a. 初始化OpenNI2
b. 打开设备
c. 创建深度流和彩色流,并启动
d. 循环读取:
深度帧 -> 转换为深度图像数组,并归一化以便显示(同时保存原始深度数据?)
彩色帧 -> 转换为RGB数组
e. 在循环中,将深度图和彩色图保存为文件(例如,按帧编号或时间戳命名)
f. 设置保存路径
由于深度数据是16位的,我们可以保存为16位的PNG(OpenCV支持)或者使用其他格式。彩色图可以保存为JPEG或PNG。
注意:深度数据直接保存为16位无符号整数(每个像素两个字节),这样不会丢失精度。显示的时候需要归一化到0-255(8位)才能正常显示。
代码结构:
1. 导入库
2. 初始化OpenNI2(指定库路径,如果库不在默认路径,需要指定)
3. 打开设备
4. 创建并启动深度流和彩色流
5. 创建保存目录(如果不存在)
6. 循环读取,保存图像
由于用户要求保存到指定路径,我们可以在代码中设置一个变量来指定路径。
注意:OpenNI2的深度图像和彩色图像的分辨率可能不同,但Gemini 336L应该支持同步流,并且分辨率可以设置。这里我们假设都设置为640x480。
参考代码(修改自引用[3]):</think>在Ubuntu系统下使用VSCode读取奥比中光Gemini 336L图像数据并保存到指定位置,可通过以下步骤实现:
### 环境配置与设备连接
1. **安装依赖库**:
```bash
pip install openni opencv-python numpy
sudo apt-get install libopenni2-dev
```
2. **连接设备**:
- 通过USB 3.0接口连接Gemini 336L相机
- 运行`lsusb`确认设备识别(应出现"Orbbec"相关条目)
### Python代码实现
创建`gemini_capture.py`文件,使用以下代码(修改保存路径):
```python
import openni
import cv2
import numpy as np
import os
import time
# 配置参数
SAVE_PATH = "/path/to/save/folder" # 替换为实际保存路径
os.makedirs(SAVE_PATH, exist_ok=True)
def initialize_camera():
openni.initialize()
dev = openni.Device.open_any()
print("设备信息:", dev.get_device_info())
return dev
def setup_streams(dev):
# 深度流配置
depth_stream = dev.create_depth_stream()
depth_stream.set_video_mode(openni.VideoMode(pixelFormat=openni.PIXEL_FORMAT_DEPTH_1_MM, resolutionX=640, resolutionY=480, fps=30))
depth_stream.start()
# 彩色流配置
color_stream = dev.create_color_stream()
color_stream.set_video_mode(openni.VideoMode(pixelFormat=openni.PIXEL_FORMAT_RGB888, resolutionX=640, resolutionY=480, fps=30))
color_stream.start()
return depth_stream, color_stream
def capture_and_save(depth_stream, color_stream):
frame_count = 0
try:
while True:
# 获取深度图
depth_frame = depth_stream.read_frame()
depth_data = depth_frame.get_buffer_as_uint16()
depth_image = np.frombuffer(depth_data, dtype=np.uint16).reshape(480, 640)
# 获取彩色图
color_frame = color_stream.read_frame()
color_data = color_frame.get_buffer_as_uint8()
color_image = np.frombuffer(color_data, dtype=np.uint8).reshape(480, 640, 3)
color_image = cv2.cvtColor(color_image, cv2.COLOR_RGB2BGR) # 转换通道顺序
# 保存图像
depth_filename = os.path.join(SAVE_PATH, f"depth_{frame_count}.png")
color_filename = os.path.join(SAVE_PATH, f"color_{frame_count}.jpg")
cv2.imwrite(depth_filename, depth_image) # 16位深度图保存为PNG
cv2.imwrite(color_filename, color_image) # 彩色图保存为JPG
print(f"已保存: {depth_filename}, {color_filename}")
frame_count += 1
time.sleep(0.1) # 控制采集频率
except KeyboardInterrupt:
print("采集终止")
if __name__ == "__main__":
dev = initialize_camera()
depth_stream, color_stream = setup_streams(dev)
capture_and_save(depth_stream, color_stream)
depth_stream.stop()
color_stream.stop()
openni.unload()
```
### 使用说明
1. **修改保存路径**:
- 替换代码中的`SAVE_PATH`为实际路径(如`/home/user/camera_data`)
2. **运行程序**:
```bash
cd /path/to/script
python gemini_capture.py
```
- 按`Ctrl+C`终止采集
3. **图像格式说明**:
- 深度图:16位PNG(单位:毫米)
- 彩色图:8位JPG(BGR格式)
### 常见问题解决
1. **设备未识别**:
- 检查`lsusb`输出
- 运行`sudo cp /usr/lib/libOpenNI2.so /usr/lib/libOpenNI2.so.0`修复库链接[^3]
2. **图像对齐问题**:
```python
# 在setup_streams中添加
dev.set_image_registration_mode(openni.IMAGE_REGISTRATION_DEPTH_TO_COLOR)
```
3. **帧同步优化**:
```python
dev.set_depth_color_sync_enabled(True)
```
### 验证结果
成功运行后,目标路径将生成序列图像文件:
```
/path/to/save/folder
├── depth_0.png # 深度图(16位)
├── color_0.jpg # 彩色图
├── depth_1.png
└── ...
```
> **注意**:深度图需用专用工具查看(如OpenCV),普通图片查看器可能显示异常[^1]
阅读全文
相关推荐


















