ios - 从 ARKit 获取 RGB "CVPixelBuffer"

标签 ios swift arkit metal cvpixelbuffer

我正在尝试从 Apple 的 ARKit 获取 RGB 颜色空间中的 CVPixelBuffer。在 ARSessionDelegatefunc 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/

相关文章:

ios - ARKit 重新定位在 .resetTracking 后不起作用

ios - 在 ARKit 中为 3D 模型添加动画

iphone - 适合我的 iOS 应用程序的模板

ios - 带有 UITableViewController 的 searchResultsController 隐藏了导航栏,如何防止呢?

ios - 我在哪里为 Swift 2 中的 NSURLSession 指定 ReloadIgnoringLocalCacheData

ios - 正确显示肖像和风景照片

ios - JSON 解码器因 URLSession 失败

ios - Storyboard 中的 View 在 iPhone 6 上无法正确调整大小

ios - UICollectionViewCell 方法调配

ios - ARKit - SceneView 显示错误位置 3D 模型