RealSense、ZED 和奥比中光Astra几款主流相机介绍及应用
以下是英特尔 RealSense、Stereolabs ZED 和奥比中光Astra几款相机的详细对比,包括参数、性能以及二次开发等支持,附带代码示例。
详细信息对比和二次开发示例
1. 英特尔 RealSense (例如 D435/D455)
- 深度技术:立体视觉 + 红外投影
- 分辨率:
- D435: 1280x720 @ 30fps
- D455: 1920x1080 @ 30fps
- 工作范围:0.2 米到 10 米
- 视场角 (FOV):宽度 86°,高度 57°
- 通讯接口:USB 3.0
- SDK 支持: Intel RealSense SDK
- 二次开发支持:C++, Python, ROS 等
- 安装依赖:
pip install pyrealsense2
代码示例(Python):
import pyrealsense2 as rs
import numpy as np
import cv2
# 创建管道
pipeline = rs.pipeline()
# 配置流
config = rs.config()
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
# 启动流
pipeline.start(config)
try:
while True:
frames = pipeline.wait_for_frames()
depth_frame = frames.get_depth_frame()
color_frame = frames.get_color_frame()
if not depth_frame or not color_frame:
continue
# 将帧转换为numpy数组
depth_image = np.asanyarray(depth_frame.get_data())
color_image = np.asanyarray(color_frame.get_data())
# 显示图像
cv2.imshow('Color', color_image)
cv2.imshow('Depth', depth_image)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
finally:
pipeline.stop()
cv2.destroyAllWindows()
代码示例(C++):
#include <librealsense2/rs.hpp> // Include RealSense Cross Platform API
#include <iostream>
int main() {
// Create a RealSense pipeline
rs2::pipeline p;
// Start the pipeline with default configuration
p.start();
while (true) {
// Wait for a new frame
rs2::frameset frames = p.wait_for_frames();
// Get the depth frame
rs2::depth_frame depth = frames.get_depth_frame();
// Get the color frame
rs2::frame color = frames.get_color_frame();
if (!depth || !color) continue;
// Get the dimensions of the image
int width = depth.get_width();
int height = depth.get_height();
std::cout << "Depth Frame: " << width << "x" << height << std::endl;
// Process the images (for demonstration, we just print the size)
// Here you can add your own image processing code
// Break the loop on a specific condition (e.g., pressing a key)
// For this example, we'll just run indefinitely
}
return 0;
}
2. ZED (Stereolabs)
- 深度技术:立体视觉 + IMU
- 分辨率:
- ZED 2: 4416x1242 @ 15fps(720p模式约 60fps)
- 工作范围:0.5 米到 20 米
- 视场角 (FOV):水平 110°,垂直 75°
- 通讯接口:USB 3.0
- SDK 支持:ZED SDK
- 二次开发支持:C++, Python, Unity, ROS 等
安装依赖:
参考 ZED SDK 安装指南
代码示例(Python):
import sys
import time
import pyzed.sl as sl
# 创建相机对象
zed = sl.Camera()
# 配置相机
init_params = sl.InitParameters()
init_params.camera_resolution = sl.RESOLUTION.HD720
init_params.depth_mode = sl.DEPTH_MODE.PERFORMANCE
zed.open(init_params)
while True:
# 捕获图像
if zed.grab() == sl.ERROR_CODE.SUCCESS:
image = sl.Mat()
zed.retrieve_image(image, sl.VIEW.COLOR)
depth = sl.Mat()
zed.retrieve_measure(depth, sl.MEASURE.DEPTH)
# 获取图像数据
image_ocv = image.get_data()
depth_ocv = depth.get_data()
# 显示图像
cv2.imshow("ZED Color", image_ocv)
cv2.imshow("ZED Depth", depth_ocv)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 关闭相机
zed.close()
代码示例(C++):
#include <sl/Camera.hpp>
int main(int argc, char **argv) {
sl::Camera zed;
sl::InitParameters init_params;
init_params.camera_resolution = sl::RESOLUTION::HD720;
init_params.depth_mode = sl::DEPTH_MODE::PERFORMANCE;
// 开始相机
if (zed.open(init_params) != sl::ERROR_CODE::SUCCESS) {
std::cerr << "Error opening ZED camera." << std::endl;
return EXIT_FAILURE;
}
sl::Mat image, depth;
while (true) {
if (zed.grab() == sl::ERROR_CODE::SUCCESS) {
zed.retrieveImage(image, sl::VIEW::LEFT);
zed.retrieveMeasure(depth, sl::MEASURE::DEPTH);
// 显示图像和深度
cv::imshow("ZED Image", image.getCvMat());
cv::imshow("ZED Depth", depth.getCvMat());
if (cv::waitKey(1) == 'q') break;
}
}
zed.close();
return EXIT_SUCCESS;
}
3. 奥比中光(Orbbec)
- 深度技术:结构光
- 分辨率:
- Astra: 640x480 @ 30fps
- Astra Pro: 1280x720 @ 30fps
- 工作范围:0.4 米到 8 米
- 视场角 (FOV):水平 60°,垂直 49°
- 通讯接口:USB 2.0 / USB 3.0
- SDK 支持:奥比中光 SDK
- 二次开发支持:C++, C#, Python, Unity 等
- 安装依赖:
参考 奥比中光 SDK 安装指南
代码示例(Python):
import numpy as np
import cv2
import openni2
# 初始化
openni2.initialize()
dev = openni2.Device.open_any()
depth_stream = dev.create_depth_stream()
color_stream = dev.create_color_stream()
# 开启流
depth_stream.start()
color_stream.start()
while True:
depth_frame = depth_stream.read_frame()
color_frame = color_stream.read_frame()
depth_data = np.frombuffer(depth_frame.get_buffer_as_uint16(), dtype=np.uint16)
color_data = np.frombuffer(color_frame.get_buffer_as_uint8(), dtype=np.uint8)
# 处理深度数据
depth_image = depth_data.reshape((depth_frame.height, depth_frame.width))
color_image = color_data.reshape((color_frame.height, color_frame.width, 3))
# 显示图像
cv2.imshow('Color Image', color_image)
cv2.imshow('Depth Image', depth_image)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 停止流
depth_stream.stop()
color_stream.stop()
openni2.unload()
代码示例(C++):
#include <OpenNI.h>
#include <iostream>
int main() {
openni::OpenNI::initialize();
openni::Device device;
if (device.open(openni::ANY_DEVICE) != openni::STATUS_OK) {
std::cerr << "Could not open device." << std::endl;
return -1;
}
openni::VideoStream depthStream, colorStream;
depthStream.create(device, openni::SENSOR_DEPTH);
colorStream.create(device, openni::SENSOR_COLOR);
depthStream.start();
colorStream.start();
openni::VideoFrameRef depthFrame, colorFrame;
while (true) {
depthStream.readFrame(&depthFrame);
colorStream.readFrame(&colorFrame);
// 显示深度和颜色
// 需添加显示代码 (如使用 OpenCV)
if (/* 检测退出条件 */) break;
}
depthStream.stop();
colorStream.stop();
device.close();
openni::OpenNI::shutdown();
return 0;
}
综合参数对比
参数 | 英特尔 RealSense | Stereolabs ZED | 奥比中光 |
---|---|---|---|
深度技术 | 立体视觉 + 红外投影 | 立体视觉 + IMU | 结构光 |
分辨率 | D435: 1280x720; D455: 1920x1080 | ZED 2: 4416x1242 | Astra: 640x480; Pro: 1280x720 |
工作范围 | 0.2 米到 10 米 | 0.5 米到 20 米 | 0.4 米到 8 米 |
视场角 (FOV) | 86° x 57° | 110° x 75° | 60° x 49° |
通讯接口 | USB 3.0 | USB 3.0 | USB 2.0 / USB 3.0 |
SDK | Intel RealSense SDK | ZED SDK | 奥比中光 SDK |
二次开发支持 | 丰富的文档与社区 | 详细API与示例 | 文档与多平台支持 |
参数 | Intel RealSense D435i | ZED Mini | 奥比中光 Astra Pro |
---|---|---|---|
分辨率 | 1280x720 (RGB), 640x480 (Depth) | 1280x720 (RGB), 720p (Depth) | 1280x720 (RGB), 640x480 (Depth) |
深度范围 | 0.3m - 10m | 0.3m - 20m | 0.5m - 8m |
帧率 | 30 fps (depth + RGB) | 60 fps (depth + RGB) | 30 fps (depth + RGB) |
通讯接口 | USB 3.0 | USB 3.0 | USB 3.0 |
视场角 | 69.4° x 42.5° | 110° x 80° | 90° x 60° |
综合性能对比
-
计算能力:
- RealSense 配备 IMU,适合移动设备和机器人。
- ZED 提供高精度深度数据和较大的视场角,适合 AR/VR 应用。
- 奥比中光专注于深度图像和手势识别等应用,适合人机交互。
-
使用场景:
- RealSense: 机器人视觉、手势识别。
- ZED: 虚拟现实、增强现实、3D 映射。
- 奥比中光: 智能家居、互动游戏。
总结
以上是对三种不同厂家相机的基本信息对比及二次开发示例,可作为小白简单了解和熟悉。不同的项目需求可以选择不同的相机,根据具体应用场景进行开发。