我正在尝试保存来自iPad专业版的FaceId TrueDepth传感器的深度数据。我使用了this demo code,并使用一个简单的按钮添加了以下代码:
@IBAction func exportData(_ sender: Any) {
let ciimage = CIImage(cvPixelBuffer: realDepthData.depthDataMap)
let depthUIImage = UIImage(ciImage: ciimage)
let data = depthUIImage.pngData()
print("data: \(realDepthData.depthDataMap)")
do {
let directory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0];
let path = directory.appendingPathComponent("FaceIdData.png");
try data!.write(to: path)
let activityViewController = UIActivityViewController(activityItems: [path], applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = exportMeshButton
present(activityViewController, animated: true, completion: nil)
} catch {
print("Unable to save image")
}
}
realDepthData
是我在dataOutputSynchronizer
中添加和更新的类属性
func dataOutputSynchronizer(_ synchronizer: AVCaptureDataOutputSynchronizer,
didOutput synchronizedDataCollection: AVCaptureSynchronizedDataCollection) {
...
let depthData = syncedDepthData.depthData
let depthPixelBuffer = depthData.depthDataMap
self.realDepthData = depthData
...
}
我能够保存图像(灰度),但我丢失了一些深度信息,特别是在背景中,所有对象都是全白的。你可以在下面的图像中看到这一点,墙和后面的第二个人看起来不正确(全白)。如果我没记错的话,从我在应用程序中看到的情况来看,我应该有更多的信息!
谢谢!
发布于 2020-12-10 01:06:56
只有32位深度才有意义-你可以看到图像的深度设置了它的gamma。.exr
和.hdr
文件格式支持32位。.png
和.jpg
通常是8位的。转换时还应考虑通道顺序。
https://stackoverflow.com/questions/65225768
复制