【问题标题】:ARKit 2 - Crop Recognizing ImagesARKit 2 - 作物识别图像
【发布时间】:2018-11-27 00:18:48
【问题描述】:

所以,我的目标是:

  1. 查找已知图像

    guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil) else { return }
    
    let configuration = ARWorldTrackingConfiguration()
    configuration.detectionImages = referenceImages
    

.

  1. 从场景视图中拍摄快照

     func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
    
           let image = sceneView.snapshot()  //  or else self.sceneView.session.currentFrame?.capturedImage
    
  2. 我需要从 SceneView 中提取图像。

这是我的代码, 我正在使用 renderer.projectPoint 方法。

  guard let imageAnchor = anchor as? ARImageAnchor else {
            return
        }
        let posx = anchorTr.x// fnode.convertPosition(node.position, to: node).x //self.positionFromTransform(node.simdTransform).x// node.simdTransform.columns.3.x
        let posy = anchorTr.y//fnode.convertPosition(node.position, to: node).y //self.positionFromTransform(node.simdTransform).y//node.simdTransform.columns.3.y
        let posz = anchorTr.z //node.simdTransform.columns.3.z


                  let width = referenceImage.physicalSize.width
        let height = referenceImage.physicalSize.height


        let topLeftPosition = SCNVector3(posx - Float(width / 2), posy - Float(height / 2), posz )
        let topRightPosition = SCNVector3(posx + Float(width / 2), posy - Float(height / 2), posz )
        let bottomLeftPosition = SCNVector3(posx - Float(width / 2), posy + Float(height / 2), posz )
        let bottomRightPosition = SCNVector3(posx + Float(width / 2), posy  + Float(height / 2), posz)


        let topLeftProjection = renderer.projectPoint(topLeftPosition)
        let topRightProjection = '''
        let bottomLeftProjection = '''
        let bottomRightProjection = '''

        let topLeft = CGPoint(x: CGFloat(topLeftProjection.x), y: CGFloat( topLeftProjection.y))
        let topRight = ''
        let bottomLeft = ''''''
        let bottomRight = '''


  let points = [topLeft, topRight, bottomRight, bottomLeft]

   self.drawPolygon(points, color:.green)

但是这个方法好像是依赖手机的位置。

【问题讨论】:

  • “我想 ”帖子不太适合这个网站。该站点用于获取有关您已经编写的代码的调试帮助。

标签: ios swift arkit


【解决方案1】:

就我而言,我通过对每个参考点执行此操作来解决它。

let transform = node.simdConvertTransform(node.simdTransform, to: node.parent!)

let x = transform.columns.3.x
let y = transform.columns.3.y
let z = transform.columns.3.z

let position = SCNVector3(x, y, z)
let projection = renderer.projectPoint(position)

let screenPoint =  CGPoint(x: CGFloat(projection.x), y: CGFloat( projection.y))

【讨论】:

  • 它对我不起作用......尊重第一个解决方案也更不稳定。
猜你喜欢
  • 2019-01-26
  • 1970-01-01
  • 2018-11-25
  • 2021-12-26
  • 2017-12-14
  • 2018-12-11
  • 2018-12-13
  • 1970-01-01
  • 2017-12-15
相关资源
最近更新 更多