我正在尝试使用camera2 API获取/计算设备摄像机的FOV,我的代码位于底部).
在我尝试galaxy S7时:
>给定的传感器尺寸为3.2mm x 2.4mm(使用SENSOR_INFO_PHYSICAL_SIZE).
>在这种情况下,我的计算HFOV是41.7°(给定的焦距是4.2mm),我通过实验证明是错误的.
>各种规格文件提到1 / 2.5“传感器尺寸(根据wikipedia,5.76mm x 4.29mm) – 这将给我一个68.9°的HFOV,更接近我的实验.
> Cameracharacteristics中的值似乎有误.
三星galaxy A3-2016上的相同查询和实验更具决定性,计算出的HFOV似乎与实验相匹配.
有没有人可以分享有关Cameracharacteristics读数可靠性的经验或数据?
我用来查询Cameracharacteristics的代码::
Cameracharacteristics characteristics = manager.getCameracharacteristics(cameraID); if (characteristics.get(Cameracharacteristics.LENS_FACING) == Cameracharacteristics.LENS_FACING_FRONT) continue; int support = characteristics.get(Cameracharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL); if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY ) Log.d("mr","Camera " + cameraID + " has LEGACY Camera2 support"); else if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED ) Log.d("mr","Camera " + cameraID + " has LIMITED Camera2 support"); else if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL ) Log.d("mr","Camera " + cameraID + " has FULL Camera2 support"); else Log.d("mr","Camera " + cameraID + " has unkNown Camera2 support?!"); // voir http://myandroidarchive.tistory.com/5 pour le query android // voir http://paulbourke.net/miscellaneous/lens/ pour les maths // include every focal length supported by the camera device,in ascending order. float[] focalLengths = characteristics.get(Cameracharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS); Sizef sensorSize = characteristics.get(Cameracharacteristics.SENSOR_INFO_PHYSICAL_SIZE); float w = 0.5f * sensorSize.getWidth(); float h = 0.5f * sensorSize.getHeight(); Log.d("mr","Camera " + cameraID + " has sensorSize == " + Float.toString(2.0f*w) + "," + Float.toString(2.0f*h)); for (int focusId=0; focusId<focalLengths.length; focusId++) { float focalLength = focalLengths[focusId]; float horizonalAngle = (float) Math.todegrees(2 * Math.atan(w / focalLength)); float verticalAngle = (float) Math.todegrees(2 * Math.atan(h / focalLength)); Log.d("mr","Camera " + cameraID + "/f" + focusId + " has focalLength == " + Float.toString(focalLength)); Log.d("mr"," * horizonalAngle == " + Float.toString(horizonalAngle)); Log.d("mr"," * verticalAngle == " + Float.toString(verticalAngle)); }