问题描述
我在新 iPhone 设备上使用 ARKit 4 (+MetalKit),我试图访问深度数据(来自 LiDAR)并将其保存为深度图以及实际的 RGB 图像。虽然我看过很多演示,但没有展示用于实际可视化深度图的代码。我制作了一个按钮,这是与它一起使用的代码:
func saveCapturedBuffer(buffer: CVPixelBuffer) {
let depthCIImage = CIImage(cvPixelBuffer: buffer)
let context: CIContext = CIContext.init(options: nil)
let depthCGImage: CGImage = context.createCGImage(depthCIImage,from: depthCIImage.extent)!
let depthUIImage = UIImage.init(cgImage: depthCGImage)
UIImageWritetoSavedPhotosAlbum(depthUIImage,self,#selector(saveError),nil)
}
@objc func capture(sender: UIButton) {
let frame: ARFrame = session.currentFrame!
guard let depthData = frame.sceneDepth ?? frame.sceneDepth else { return }
var pixelBufferDepth: CVPixelBuffer!
pixelBufferDepth = depthData.depthMap
saveCapturedBuffer(buffer: pixelBufferDepth)
var capturedImageBuffer: CVPixelBuffer!
capturedImageBuffer = frame.capturedImage
print(CVPixelBufferGetPlaneCount(capturedImageBuffer))
saveCapturedBuffer(buffer: capturedImageBuffer)
}
@objc func saveError(_ image: UIImage,didFinishSavingWithError error: Error?,contextInfo: UnsafeRawPointer) {
if let error = error {
print("error: \(error.localizedDescription)")
} else { }
}
因此,RGB 图像由此代码保存,没有任何问题。但是,深度图有时绝对是空的(虽然我在渲染深度图时看到了更好的深度图)。所以,我猜 CVPixelBuffer
到 UIImage
的转换有问题。我对 Swift 完全陌生,我不知道它是什么。
我发现 CVPixelBuffer
是非平面的,所以我猜这是我的问题,但我既不知道该怎么做,也没有找到任何解释如何进行的答案.
那么,如何将带有CVPixelBuffer
的非平面sceneDepth.depthMap
正确转换为UIImage
?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)