I want to know the angle of view from the camera, just like in this question but using android.hardware.camera2. How can I reproduce the next code using the new camera2 library.
Camera.Parameters p = camera.getParameters();
double thetaV = Math.toRadians(p.getVerticalViewAngle());
double thetaH = Math.toRadians(p.getHorizontalViewAngle());
Is there a way to do the same thing?
Using camera2
API we can do it like this:
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()
But usually such values are for 4:3 aspect preview ratio, if you need it for 16:9 aspect ratio or other then check this Without additional calculation Camera or camera2 APIs return FOV angle values for 4:3 aspect ratio by default?
I search the google a person show possibility which he calculate FOV by Camera2 api
https://photo.stackexchange.com/questions/54054/calculating-the-field-of-view-for-a-nexus-5
and found the equation
http://www.bobatkins.com/photography/technical/field_of_view.html
FOV (rectilinear) = 2 * arctan (frame size/(focal length * 2))
thus, we need to know frame size and focal length
the frame size is size of camera you can find the code on below link
https://stackoverflow.com/a/30403558
also, focal length you can find below link
Manual focus in camera2, android
and i combine the code like this
A function calculateFOV() calculate FOV angle
https://github.com/pchan1401-ICIL/Camera2FOV
As far as my research has gone the answer is no. With the camera2
API there is no call which can give you the vertical and horizontal viewing angle.
However, you don't need to use the camera2
API to get those values. You can just use the original camera
API to get the vertical and horizontal view angle and then use the camera2
API for the rest of the app.
As far as I know the actual image capture firmware hasn't changed between the camera and camera2
APIs.
You could do it mathematically.
You have:
L
, the width of an objectd
, the distance to the objectYou want to calculate the angle a
(alpha), the field of view.
Doing some trig:
tan(a/2) = (L/2)/d
tan(a/2) = L/2d
a/2 = atan(L/2d)
a = 2*atan(L/2d)
You can do that to calculate the horizontal field of view. Good luck!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With