【发布时间】:2021-10-04 20:49:30
【问题描述】:
在使用 arcore 时,是否有可用于访问相机视野(“FoV”、“视角”)的属性或方法?
从一些实验来看,FoV 通常约为 60 度,但可能会因设备硬件而异。
如果不能直接访问,有没有办法从任何相机对象属性计算 FoV 角度,例如视图矩阵?
【问题讨论】:
在使用 arcore 时,是否有可用于访问相机视野(“FoV”、“视角”)的属性或方法?
从一些实验来看,FoV 通常约为 60 度,但可能会因设备硬件而异。
如果不能直接访问,有没有办法从任何相机对象属性计算 FoV 角度,例如视图矩阵?
【问题讨论】:
ARCore 库 v1.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)))
【讨论】:
现在可以在 CameraIntrinsics 类中使用 getFocalLength()
输出是以像素为单位的焦距,如果图像大小已知,则可以转换为度数。
【讨论】: