получить текущий кадр как uiimage из ARWorldTrackingConfiguration?

Мне нужно извлечь кадр, который видит физическая камера (без добавления SCNScene), пока настроен ARWorldTrackingConfiguration. Я новичок в 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()


person temo    schedule 10.03.2019    source источник
comment
Где ваш код, исследования, прогресс? Дайте нам что-нибудь, чтобы мы могли дать вам решение   -  person excitedmicrobe    schedule 10.03.2019
comment
Я добавил то, что пробовал и не сработало   -  person temo    schedule 10.03.2019


Ответы (1)


Вы можете преобразовать 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

}
person excitedmicrobe    schedule 10.03.2019