获取android摄像头设备的视角
我想知道摄像机的视角,就像上面提到的一样,但使用的是android.hardware.camera2。如何使用新的camera2库重现下一个代码获取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()); 有没有办法做同样的事情?
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: