realsense D455读取深度图时,深度值不变问题解决方案

使用python代码读取深度相机D455时,保存每一帧的深度信息,结果使用时发现除了前两帧以外,后面所有的深度图都完全一样,同样的代码分别3个场景做实验:

一、深度相机+树莓派(Ubuntu系统)

二、深度相机+树莓派(Ubuntu系统)

三、深度相机+PC机(win10系统)

上述三个场景使用同样的代码,后面两种情况都正常,只有第一种会出现这种问题。

经过调试,将相机读取的fps从30设置为15,问题消失,保存数据正常。读取基本代码如下:

def get_image():
    # Configure depth and color streams
    pipeline = rs.pipeline()
    config = rs.config()
    # ctx = rs.context()
    # ds5_serial = '*****'
    # ds5_serial = ctx.devices[1].get_info(rs.camera_info.serial_number)
    # print('启动的摄像头序列号:{}'.format(ds5_serial))
    # config.enable_device(ds5_serial)
    config.enable_stream(rs.stream.depth, 1280, 720, rs.format.z16, 15)
    config.enable_stream(rs.stream.color, 1280, 720, rs.format.bgr8, 15)
    # Start streaming
    pipeline.start(config)
    # 获取颜色对齐
    align_to = rs.stream.color
    align = rs.align(align_to)
    save_path = './data_psk'
    if not os.path.isdir(save_path):
        os.makedirs(save_path)
    n = 0
    count = 0
    while 1:
        frames = pipeline.wait_for_frames()
        # 将图像对齐
        aligned_frames = align.process(frames)
        # 获取对齐后的深度图
        aligned_depth_frame = aligned_frames.get_depth_frame()
        color_frame = aligned_frames.get_color_frame()
        # 获取16位深度图
        depth_image = np.asanyarray(aligned_depth_frame.get_data())
        # 获取彩色图
        color_image = np.asanyarray(color_frame.get_data())

        if count % 10 == 0:
            # 保存rgb图
            cv2.imwrite(os.path.join(save_path, 'rgb_' + str(n).zfill(6) + '.jpg'), color_image)
            # 保存16位深度图
            np.save(os.path.join(save_path, 'rgb_' + str(n).zfill(6)), depth_image)
            print(os.path.join(save_path, 'rgb_' + str(n).zfill(6) + '.jpg'))
            n = n + 1
        if n > 1000:
            break
        count += 1
    print("done!")
可能是树莓派性能有限,造成深度计算拥堵造成的,后面还需修改读取图像大小来做对比试验,保证相机在边缘端稳定运行。
PS:fps设置过小(如设置为10),相机不能正常读取。

你可能感兴趣的:(python,计算机视觉)