获取android摄像头设备的视角

获取android摄像头设备的视角,android,camera,android-camera,angle,Android,Camera,Android Camera,Angle,我想知道摄像机的视角,就像上面提到的一样,但使用的是android.hardware.camera2。如何使用新的camera2库重现下一个代码 Camera.Parameters p = camera.getParameters(); double thetaV = Math.toRadians(p.getVerticalViewAngle()); double thetaH = Math.toRadians(p.getHorizontalViewAngle()); 有没有办法做同样的事情?

我想知道摄像机的视角,就像上面提到的一样,但使用的是android.hardware.camera2。如何使用新的camera2库重现下一个代码

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

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

你可以用数学方法来做

你有:

  • L
    ,对象的宽度
  • d
    ,到对象的距离
您需要计算角度
a
(alpha),即视野

做一些trig:

tan(a/2) = (L/2)/d
tan(a/2) = L/2d
a/2 = atan(L/2d)
a = 2*atan(L/2d)

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

就我的研究而言,答案是否定的。使用
camera2
API,没有任何调用可以提供垂直和水平视角

但是,您不需要使用
camera2
API来获取这些值。您只需使用原始的
camera
API获取垂直和水平视角,然后对应用程序的其余部分使用
camera2
API即可


据我所知,摄像机和camera2 api之间的实际图像捕获固件没有改变。

我搜索了google一个人展示他通过camera2 api计算FOV的可能性

找到了方程

视场(直线)=2*arctan(帧大小/(焦距*2))

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

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

此外,焦距可以在下面的链接中找到

我这样组合代码

函数calculateFOV()用于计算视野角度


使用
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纵横比或其他,那么检查这个

我知道这个解决方案,但这不是我想要的,因为用户需要进行校准,在达到这一点之前已经有很多步骤,我不想让用户做更多的步骤来了解d和LOh是的。。。对不起,我不知道更好的解决办法:写得很好!我现在被Camera 2 API让开发人员更加困难的说法震惊了。我认为连续的API集是为了增加功能。答案很糟糕,可以计算,有传感器大小、焦距和其他可用数据
您只需使用原始摄像头即可
=
只需使用弃用的API即可
-太聪明了!。。。如何使用
camera2
API: