首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ARKit获取RGB "CVPixelBuffer“

从ARKit获取RGB "CVPixelBuffer“
EN

Stack Overflow用户
提问于 2017-06-07 22:53:02
回答 5查看 8.2K关注 0票数 13

我正在试着从苹果的ARKit上买一部RGB色彩空间的CVPixelBuffer。在ARSessionDelegatefunc session(_ session: ARSession, didUpdate frame: ARFrame)方法中,我得到了ARFrame的一个实例。在Displaying an AR Experience with Metal页面上,我发现这个像素缓冲区在YCbCr (YUV)颜色空间中。

我需要将其转换为RGB色彩空间(我实际上需要CVPixelBuffer而不是UIImage)。我在iOS上找到了关于颜色转换的something,但我无法在Swift 3中使用它。

EN

回答 5

Stack Overflow用户

发布于 2017-06-12 03:16:02

有几种方法可以做到这一点,这取决于你想要什么。实时执行此操作的最佳方法(即,将缓冲区渲染到视图)是使用自定义着色器将YCbCr CVPixelBuffer转化为RGB。

使用金属的如果你创建一个新项目,选择“增强现实应用程序”,并为内容技术选择“金属”,生成的项目将包含进行此转换所需的代码和着色器。

使用OpenGL的来自苹果的GLCameraRipple example使用AVCaptureSession来捕捉摄影机,并展示了如何将生成的CVPixelBuffer映射到GL纹理,然后在着色器中将其转化为RGB (同样,在示例中提供)。

非实时:解决了this stackoverflow question地址将缓冲区转换为UIImage的问题,并提供了一种非常简单的方法。

票数 9
EN

Stack Overflow用户

发布于 2017-06-27 10:59:07

我在这个问题上也坚持了几天。我在网上能找到的所有代码片段都是用Objective-C而不是Swift编写的,关于CVPixelBufferUIImage的转换。

最后,下面的代码片段非常适合我,它可以将YUV图像转换为JPG或PNG文件格式,然后可以将其写入应用程序中的本地文件。

代码语言:javascript
复制
func pixelBufferToUIImage(pixelBuffer: CVPixelBuffer) -> UIImage {
    let ciImage = CIImage(cvPixelBuffer: pixelBuffer)
    let context = CIContext(options: nil)
    let cgImage = context.createCGImage(ciImage, from: ciImage.extent)
    let uiImage = UIImage(cgImage: cgImage!)
    return uiImage
}
票数 3
EN

Stack Overflow用户

发布于 2017-06-17 04:25:07

docs明确表示您需要访问亮度和色度平面:

ARKit捕获平面YCbCr格式(也称为YUV)格式的像素缓冲区。要在设备显示器上渲染这些图像,需要访问像素缓冲区的亮度和色度平面,并将像素值转换为RGB格式。

所以没有办法直接获得RGB平面,你必须在你的着色器中处理这个问题,无论是在金属中还是在@joshue描述的openGL中

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44416089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档