ios - 保存来自 TrueDepth 相机的深度图像

标签 ios swift iphone-x truedepth-camera

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

我有 depthData,它是 AVDepthData 的一个实例。它的成员之一是 depthDataMap,它是 CVPixelBuffer 和图像格式类型 kCVPixelFormatType_DisparityFloat16 的一个实例。有没有办法保存到手机中传输,供离线操作?

最佳答案

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

这里有几个值得研究的选项:

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

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

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

关于ios - 保存来自 TrueDepth 相机的深度图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47664306/

相关文章:

ios - 在 facebook 中出现此错误 (com.facebook.error.2 )

ios - Xcode 中的信号中止 (SIGABRT) 异常

ios - 从 iOS "safe area"中排除导航栏

ios - 如何在 Xcode 模拟器中关闭 iPhone X 的电源?

ios - Vuforia + Unity 为 iPhone X iOS 11.4 黑屏构建

ios - 阅读用户在 xcode 中定义build设置

javascript - 如何创建动态字典和添加删除键值对?

iphone - SIGABRT 在 NSManagedObjectContext = [NSEntityDescription ...] 之后

ios - 在 iOS 中使用 Swift 更改 UIAlertAction 的 UIAlertController 按钮标题的字体大小

ios - 单元测试 : Is there ways to see code coverage for Swift?