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

如何用GStreamer保存ZED 2相机的原始深度图视频?

保存ZED 2相机GRAY16_LE格式真实深度值的方法

问题描述

我使用ZED 2相机,它输出GRAY16_LE格式的未归一化真实深度图数值,希望保存这些数值以用于后续处理和归一化,且不丢失真实深度信息。

此前仅做可视化的GStreamer管道:

gst-launch-1.0 zedsrc stream-type=3 ! 'video/x-raw,format=GRAY16_LE' ! autovideoconvert ! queue ! fpsdisplaysink

尝试过将图像转换为RGB并压缩保存为.avi格式,但像素数值丢失了原本的深度含义,既不是真实深度值也不像归一化后的结果:

gst-launch-1.0 zedsrc stream-type=3 ! 'video/x-raw,format=GRAY16_LE' !  videoconvert ! video/x-raw,format=RGB ! jpegenc ! avimux ! filesink location=video.avi

请问有没有方法可以保存相机输出的真实深度值?应该使用什么格式?

解决方案

要保存原始的GRAY16_LE深度数据且不丢失信息,关键是别做有损压缩和不必要的格式转换,直接存原始的16位灰度数据就行,以下是几种可行的方法:

1. 用无损视频容器保存(推荐)

用MKV或者无压缩AVI这类容器直接封装原始的GRAY16_LE数据流,不会修改深度数值:

# 保存为MKV格式(完美支持16位原始数据)
gst-launch-1.0 zedsrc stream-type=3 ! 'video/x-raw,format=GRAY16_LE,width=1280,height=720' ! matroskamux ! filesink location=raw_depth.mkv

# 保存为无压缩AVI格式
gst-launch-1.0 zedsrc stream-type=3 ! 'video/x-raw,format=GRAY16_LE' ! avimux ! filesink location=raw_depth.avi

这类容器存的就是相机输出的原始16位深度值(ZED的这个格式单位一般是毫米,你可以查下相机参数确认),后续用OpenCV或者GStreamer就能直接读出来用。

2. 逐帧存成无损图像格式

如果需要单帧处理,就把每帧存成PNG或者TIFF,这俩格式都能无损存16位灰度数据:

# 保存为PNG序列(文件名自动按顺序编号)
gst-launch-1.0 zedsrc stream-type=3 ! 'video/x-raw,format=GRAY16_LE' ! pngenc ! multifilesink location=depth_frame_%04d.png

# 保存为TIFF序列
gst-launch-1.0 zedsrc stream-type=3 ! 'video/x-raw,format=GRAY16_LE' ! tiffenc ! multifilesink location=depth_frame_%04d.tif

之后读取这些图像文件时,直接读16位灰度通道就能拿到原始深度数值。

3. 避坑提醒

  • 绝对别用JPEG、H.264这类有损压缩格式,它们会把16位数据的精度毁掉,原始深度值就没了。
  • 后续用代码读取的时候,一定要指定格式为GRAY16_LE(小端模式的16位灰度),不然数值会解析错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:09:29