使用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),相机不能正常读取。