从 ARWorldTrackingConfiguration 获取当前帧作为 uiimage?

get current fram as uiimage from ARWorldTrackingConfiguration?

我需要在配置 ARWorldTrackingConfiguration 时提取物理相机看到的帧(未添加 SCNScene)。 我是 ios 的新手,所以也许我遗漏了一些东西,但我无法做到这一点。 对如何执行此操作的任何帮助表示赞赏。

我试过使用

提取
var buffer = self.sceneView.session.currentFrame?.capturedImage

其中 sceneView 是我的 ARSCNView,我认为它会给我 YCbCr 中的图像

然后我尝试使用

转换为 RGB
let ciImage = CIImage(cvPixelBuffer: buffer)
let context = CIContext(options: nil)
let cgImage = context.createCGImage(ciImage, from: ciImage.extent)
let uiImage = UIImage(cgImage: cgImage!)

但是在调用 pixelBufferToUIImage() 后得到了 nil 错误

您可以使用此函数将 ARSCNView 转换为 UIImage

func imageFrom(scene:ARSCNView) -> UIImage {

    UIGraphicsBeginImageContextWithOptions(scene.bounds.size, scene.isOpaque, 0.0)
    scene.drawHierarchy(in: scene.bounds, afterScreenUpdates: false)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return UIImage(cgImage: (image?.cgImage)!)

}

用法:

@IBOutlet var sceneView: ARSCNView!

override func viewDidLoad() {
        super.viewDidLoad()
    let convertedToImage = imageFrom(scene: sceneView)

    // Do something with convertedToImage

}