从 ARReferenceImage 获取 UIImage 或 CIImage

Getting a UIImage or CIImage from ARReferenceImage

我正在使用 ARKitARAnchors 上做一些动画。我的图像存储在 AR Resource Group 中,如下所示。

因此,可以像下面那样访问它们,以便将它们作为跟踪图像加载到我的会话中。但是,我还想对这些相同的图像进行一些单独的操作,因此需要以 CIImagesUIImages 的方式访问它们。现在我必须将它们单独导入到我的项目中,因为似乎没有办法从 ARReferenceImage 中提取图像。有没有办法做到这一点?使用 AR Resource Group 非常方便,因为它会在编译前显示有关潜在冲突和性能较低的标记的相关警告。我还假设如果我要将我的 PNG 图像转换为 CIImages 然后转换为我的 viewDidLoad() 中的 ARReferenceImage 或通过一些类似的方式加载应用程序将花费更多时间。

guard let trackedImages = ARReferenceImage.referenceImages(inGroupNamed: "Photos", bundle: Bundle.main) else {
    print("No images available")
    return
}

在 Xcode 中创建 ARReferenceImage 不会将原始图像放入应用的资产目录中,因此原始图像在 运行 时不可用。 (相反,ARKit 将图像预处理为一种形式,使识别更高效,同时使用更少的存储空间。)

如果您想将图像同时用于 ARKit 识别和视觉显示(或其他处理),您需要将其包含在资产目录中两次——一次作为 AR 参考图像,然后再次作为正常 (UIImage) 资产。

或者,您可以将它作为普通图像添加到您的资产目录中,然后在 运行 时从中创建一个 ARReferenceImage — class 有一个初始化程序,需要 CGImage。 (在这种情况下,使用资产目录的 AR Reference Images 区域预检您的图像并确保它们适合识别可能仍然有用,即使您没有以这种方式交付它们也是如此。