因此,我的目标是:
-
查找已知图片
-
从 sceneView 中提取(e.g 拍摄快照)
-
执行进一步处理
使用ARReferenceImage完成第一步非常容易:
guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil) else { return }
let configuration = ARWorldTrackingConfiguration()
configuration.detectionImages = referenceImages
但是现在我不知道如何从 SceneView 中提取图像。我已将平面节点添加到 imageAnchor 中:
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
DispatchQueue.main.async { [unowned self] in
guard let imageAnchor = anchor as? ARImageAnchor
else { return }
let planeNode = self.getPlaneNode(withReferenceImage: imageAnchor.referenceImage)
planeNode.opacity = 0.5
planeNode.eulerAngles.x = -.pi / 2
node.addChildNode(planeNode)
}
}
结果:
因此,我需要平面节点在屏幕上的投影以获取节点的 2D 屏幕坐标,然后剪切图像。我找到了以下方法:renderer.projectPoint(node.position)
却没有帮助。当整个图片显示在屏幕上时,它甚至可以返回负值。
我做对了吗?任何帮助将不胜感激。
1 回答
就我而言,我解决了。
欲了解更多信息
ARKit 2-作物识别图像
iOS 8 Core Image 通过 Swift 保存图像的一部分
https://nacho4d-nacho4d.blogspot.com/2012/03/coreimage-and-uikit-coordinates.html