我正在尝试从 Apple 的 ARKit 获取 RGB 颜色空间中的 CVPixelBuffer
。在 ARSessionDelegate
的 func session(_ session: ARSession, didUpdate frame: ARFrame)
方法中,我得到了 ARFrame
的实例。在页面 Displaying an AR Experience with Metal我发现这个像素缓冲区是在 YCbCr (YUV) 颜色空间中。
我需要将其转换为 RGB 颜色空间(我实际上需要 CVPixelBuffer
而不是 UIImage
)。我找到了 something关于 iOS 上的颜色转换,但我无法在 Swift 3 中使用它。
最佳答案
有多种方法可以做到这一点,具体取决于您的需求。实时执行此操作(也就是说,将缓冲区渲染到 View )的最佳方法是使用自定义着色器将 YCbCr CVPixelBuffer 转换为 RGB。
使用 Metal : 如果您创建一个新项目,选择“增强现实应用程序”,并为内容技术选择“Metal ”,生成的项目将包含进行此转换所需的代码和着色器。
使用 OpenGL: GLCameraRipple example来自 Apple 使用 AVCaptureSession 来捕获相机,并展示了如何将生成的 CVPixelBuffer 映射到 GL 纹理,然后在着色器中将其转换为 RGB(再次在示例中提供)。
非实时: this stackoverflow question的答案解决了将缓冲区转换为 UIImage 的问题,并提供了一种非常简单的方法。
关于ios - 从 ARKit 获取 RGB "CVPixelBuffer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44416089/