【问题标题】:How to calculate field of view in arcore?如何计算arcore中的视野?
【发布时间】:2021-10-04 20:49:30
【问题描述】:

在使用 arcore 时,是否有可用于访问相机视野(“FoV”、“视角”)的属性或方法?

从一些实验来看,FoV 通常约为 60 度,但可能会因设备硬件而异。

如果不能直接访问,有没有办法从任何相机对象属性计算 FoV 角度,例如视图矩阵?

【问题讨论】:

    标签: android arcore


    【解决方案1】:

    ARCorev1.8.0 不返回 FoV 值。相反,您可以使用Camera 参数计算它:

    val frame = session.update()
    val camera = frame.camera
    val imageIntrinsics = camera.imageIntrinsics
    
    val focalLength = imageIntrinsics.focalLength[0]
    val size = imageIntrinsics.imageDimensions
    val w = size[0]
    val h = size[1]
    
    val fovW = Math.toDegrees(2 * Math.atan(w / (focalLength * 2.0)))
    val fovH = Math.toDegrees(2 * Math.atan(h / (focalLength * 2.0)))
    

    Camera2 API 的另一种解决方案:

    val cameraId = session.cameraConfig.cameraId
    
    val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
    val characteristics = cameraManager.getCameraCharacteristics(cameraId)
    
    val maxFocus = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS)
    val size = characteristics.get(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE)
    val w = size.width
    val h = size.height
    
    val fovW = Math.toDegrees(2 * Math.atan(w / (maxFocus[0] * 2.0)))
    val fovH = Math.toDegrees(2 * Math.atan(h / (maxFocus[0] * 2.0)))
    

    【讨论】:

      【解决方案2】:

      现在可以在 CameraIntrinsics 类中使用 getFocalLength()

      输出是以像素为单位的焦距,如果图像大小已知,则可以转换为度数。

      【讨论】:

        猜你喜欢
        • 2011-11-26
        • 2021-01-14
        • 2017-02-20
        • 1970-01-01
        • 1970-01-01
        • 2016-06-05
        • 2013-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多