从 TrueDepth 相机保存深度图像

dus*_*max 5 ios swift iphone-x truedepth-camera

我正在尝试从 iPhoneX TrueDepth 相机保存深度图像。使用AVCamPhotoFilter示例代码,我能够在手机屏幕上实时查看转换为灰度格式的深度。我无法弄清楚如何以原始(16 位或更多)格式保存深度图像序列。

我有depthDatawhich 是AVDepthData. 它的成员之一是depthDataMapwhich 是CVPixelBuffer和 image format type的实例kCVPixelFormatType_DisparityFloat16。有没有办法将其保存到手机中以进行离线操作?

ric*_*ter 6

“原始”深度/视差图没有标准视频格式,这可能与 AVCapture 没有真正提供记录它的方法有关。

您有几个值得研究的选项:

  1. 将深度图转换为灰度纹理(您可以使用AVCamPhotoFilter示例代码中的代码执行此操作),然后将这些纹理传递给AVAssetWriter以生成灰度视频。根据您选择的视频格式和灰度转换方法,您为读取视频而编写的其他软件可能能够从灰度帧中以足够的精度恢复深度/视差信息,以达到您的目的。

  2. 任何时候CVPixelBuffer,您都可以自己获取数据并使用它做任何您想做的事情。使用CVPixelBufferLockBaseAddress(带readOnly标志)确保内容在您阅读时不会改变,然后将数据从指针CVPixelBufferGetBaseAddress提供到您想要的任何位置。(使用其他像素缓冲区函数查看要复制的字节数,并在完成后解锁缓冲区。)

    但是请注意:如果您花费太多时间从缓冲区复制或以其他方式保留它们,它们将不会随着新缓冲区从捕获系统进入而被释放,并且您的捕获会话将挂起。(总而言之,如果不测试设备是否具有以这种方式进行大量记录的内存和 I/O 带宽,就不清楚了。)