获取Android相机设备的视角

时间:2015-07-01 22:33:11

标签: android camera android-camera angle

我想知道相机的视角,就像在this问题中一样,但是使用android.hardware.camera2。如何使用新的camera2库重现下一个代码。

Camera.Parameters p = camera.getParameters();
double thetaV = Math.toRadians(p.getVerticalViewAngle());
double thetaH = Math.toRadians(p.getHorizontalViewAngle());

有没有办法做同样的事情?

4 个答案:

答案 0 :(得分:6)

我搜索谷歌一个人展示的可能性,他通过Camera2 api计算FOV

https://photo.stackexchange.com/questions/54054/calculating-the-field-of-view-for-a-nexus-5

找到方程式

http://www.bobatkins.com/photography/technical/field_of_view.html

FOV(直线)= 2 * arctan(帧尺寸/(焦距* 2))

因此,我们需要知道帧大小焦距

帧大小是相机的大小,你可以在链接下面找到代码

https://stackoverflow.com/a/30403558

另外,焦距你可以在下面找到链接

Manual focus in camera2, android

我将这样的代码组合在一起

函数calculateFOV()计算FOV角度

https://github.com/pchan1401-ICIL/Camera2FOV

答案 1 :(得分:5)

就我的研究而言,答案是肯定的。使用camera2 API,没有可以为您提供垂直和水平视角的通话。

但是,您无需使用camera2 API来获取这些值。您只需使用原始camera API获取垂直和水平视角,然后将camera2 API用于应用的其余部分。

据我所知,相机和camera2 API之间的实际图像捕获固件没有变化。

答案 2 :(得分:4)

你可以用数学方法做到。

Diagram

你有:

  • target=999 sum=0 for i=1 to target do if (i mod 3=0) or (i mod 5)=0 then sum:=sum+i output sum ,对象的宽度
  • L,与对象的距离

您想要计算角度d(alpha),即视野。

做一些触发:

a

您可以这样做来计算水平视野。祝你好运!

答案 3 :(得分:1)

使用 camera2 API,我们可以这样做:

val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
val cameraCharacteristics = cameraManager.getCameraCharacteristics("0") // hardcoded first back camera id

val focalLength = cameraCharacteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS)?.firstOrNull() ?: return
val sensorSize = cameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE) ?: return
val horizontalAngle = (2f * atan((sensorSize.width / (focalLength * 2f)).toDouble())) * 180.0 / Math.PI
val verticalAngle = (2f * atan((sensorSize.height / (focalLength * 2f)).toDouble())) * 180.0 / Math.PI

// using camera2 API we got the same data as with legacy Camera API (with it was easier):
// val parameters = camera.getParameters()
// val horizontalAngle = parameters.getHorizontalViewAngle()
// val verticalAngle = parameters.getVerticalViewAngle()

但通常这些值适用于 4:3 纵横比预览,如果您需要 16:9 纵横比或其他,请检查此 Without additional calculation Camera or camera2 APIs return FOV angle values for 4:3 aspect ratio by default?