You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何显示Intel RealSense D435i的Raw Image输入流以控制机械臂?

解决Intel RealSense D435i Raw图像流显示问题

核心逻辑

你拿到的整数列表是像素的原始数值序列,只需先把它转换成OpenCV支持的图像矩阵格式,再通过循环窗口就能实现实时显示。

步骤1:将整数列表转为OpenCV图像矩阵

根据D435i的Raw数据类型,分两种常见场景处理:

场景1:Raw是8位灰度图像(如Y8格式)

每个整数对应0-255的灰度值,直接按640×480的尺寸重构矩阵:

import cv2
import numpy as np

# raw_data是你读取到的整数列表,长度必须是640*480=307200
raw_data = [...]

# 转成uint8类型的numpy数组,再重构为480行640列的单通道图像
img_array = np.array(raw_data, dtype=np.uint8)
img = img_array.reshape((480, 640))

场景2:Raw是16位深度图像(如Z16格式)

深度Raw数据的整数范围是0-65535,需要先映射到0-255的灰度范围才能正常显示:

import cv2
import numpy as np

raw_data = [...]  # 长度为640*480的整数列表

# 转成uint16类型数组,再映射到8位灰度区间
img_array = np.array(raw_data, dtype=np.uint16)
img_16bit = img_array.reshape((480, 640))
img_8bit = cv2.convertScaleAbs(img_16bit, alpha=255/65535)

步骤2:实时显示图像流

用OpenCV循环读取最新帧并显示,匹配30FPS的帧率:

# 创建显示窗口
cv2.namedWindow("RealSense Raw Stream", cv2.WINDOW_NORMAL)

while True:
    # 替换成你获取最新raw_data的逻辑
    raw_data = get_latest_raw_frame()
    
    # 按上述场景1或2处理得到可显示的图像
    img_array = np.array(raw_data, dtype=np.uint8)
    img = img_array.reshape((480, 640))
    
    # 显示图像
    cv2.imshow("RealSense Raw Stream", img)
    
    # 控制30FPS,按q键退出
    if cv2.waitKey(33) & 0xFF == ord('q'):
        break

# 释放资源
cv2.destroyAllWindows()

额外提示

  • 必须保证整数列表长度严格等于640*480,否则重构矩阵会报错;如果是彩色Raw(如RGB8),列表长度应为640*480*3,重构时要加上通道维度(480,640,3),再用cv2.cvtColor(img, cv2.COLOR_RGB2BGR)转成OpenCV支持的BGR格式。
  • 要是你还在手动读取Raw列表,更推荐用pyrealsense2SDK直接获取原始帧,比手动处理整数列表更稳定:
import pyrealsense2 as rs
import cv2
import numpy as np

pipe = rs.pipeline()
config = rs.config()
# 配置Raw灰度流,可根据需求改成深度流或彩色流
config.enable_stream(rs.stream.color, 640, 480, rs.format.y8, 30)
pipe.start(config)

try:
    while True:
        frames = pipe.wait_for_frames()
        color_frame = frames.get_color_frame()
        if not color_frame:
            continue
        
        # 直接获取Raw字节流转成numpy数组
        img = np.asanyarray(color_frame.get_data())
        cv2.imshow("Raw Stream", img)
        
        if cv2.waitKey(33) & 0xFF == ord('q'):
            break
finally:
    pipe.stop()
    cv2.destroyAllWindows()

内容的提问来源于stack exchange,提问作者Mnisyif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:25:46