需要一些帮助将cvpixelbuffer数据转换为iOS

时间:2018-03-11 21:49:05

标签: ios swift cvpixelbuffer

所以我试图获得通常在iOS图像深度示例中使用的灰度深度图的jpeg / png表示。深度数据作为辅助数据存储在每个jpeg中。我已经遵循了一些教程,我没有问题将这个灰度数据渲染到屏幕上,但我找不到实际将其保存为jpeg / png表示的方法。我几乎都在使用这段代码:https://www.raywenderlich.com/168312/image-depth-maps-tutorial-ios-getting-started

将深度数据放入cvpixelbuffer并相应地进行操作。我相信它的格式为kCVPixelFormatType_DisparityFloat32

虽然我能够在屏幕上看到相应的数据,但我无法使用UIImagePNGRepresentationUIImageJPGRepresentation。当然,我可以手动捕获屏幕截图,但这并不是很理想。

我怀疑cvpixelbuffer数据格式与这些UIImage函数不兼容,这就是我无法让它们吐出图像的原因。

有没有人有任何建议?

3 个答案:

答案 0 :(得分:1)

// CVPixelBuffer to UIImage
let ciImageDepth            = CIImage(cvPixelBuffer: cvPixelBufferDepth)
let contextDepth:CIContext  = CIContext.init(options: nil)
let cgImageDepth:CGImage    = contextDepth.createCGImage(ciImageDepth, from: ciImageDepth.extent)!
let uiImageDepth:UIImage    = UIImage(cgImage: cgImageDepth, scale: 1, orientation: UIImage.Orientation.up)

// Save UIImage to Photos Album
UIImageWriteToSavedPhotosAlbum(uiImageDepth, nil, nil, nil)

答案 1 :(得分:0)

我明白了。我必须先转换为CGImage。结束cvPixelBuffer到CIImage到CGImage到UIImage。

答案 2 :(得分:0)

发布快速代码示例,以防有人使用。

let ciimage = CIImage(cvPixelBuffer: depthBuffer) // depth cvPixelBuffer
let depthUIImage = UIImage(ciImage: ciimage)