Android CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS 不工作?
Android CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS not working?
谁能解释一下 LENS_INFO_AVAILABLE_FOCAL_LENGTHS 的工作原理?
文档说:
List of focal lengths for android.lens.focalLength that are supported by this camera device.
If optical zoom is not supported, this list will only contain a single value corresponding to the fixed focal length of the device. Otherwise, this list will include every focal length supported by the camera device, in ascending order.
Units: Millimeters
最后一行说输出应该是我的 phone 相机焦距的浮点数,以毫米为单位测量,但控制台将第一个值打印为:
D/Focal length: 3.95
小于厂家显示的phone焦距:
摩托罗拉 Moto G6 规格。
Aperture f/1.8.
Focal Length 29mm.
我是不是做错了什么? 我正在使用 CameraCharacteristics.get(..) 来检索该值
我想我解决了。我正在回答我自己的问题,以防有人像我一样迷路。
这里的问题是 CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS returns 你相机的真实焦距,手机的小镜头 phone 有几毫米的焦距,但那是不是你拍照时看到的。
这里的关键是获得有效焦距,这是通过将物理 FL 乘以传感器尺寸获得的。后者可以通过以下方式获得:
CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE
并取这些值的斜边
因此您希望 phone 的有效焦距为:
EFL = FL * SIZE
现在我得到一个更可靠的焦距值 25mm
(更多信息在 Anton Gorlin Photography
我也 运行 对此感兴趣,您的回答很有帮助。不过,我想补充一点,公式实际上是:
EFL = FL x CF
CF = Crop Factor,其实不是sensor的大小,而是43.27与sensor大小的比值:
The crop factor is the ratio on the full-frame diagonal to the diagonal of the sensor we calculate.
Source: Anton Gorlin Photography
那么,最终公式为:
EFL = FL * (43.27 / SIZE)
FL = LENS_INFO_AVAILABLE_FOCAL_LENGTHS
返回的焦距
SIZE = sqrt(sensorWidth * sensorWidth + sensorHeight * sensorHeight)
你可以按照你说的SENSOR_INFO_PHYSICAL_SIZE获取传感器的宽度和高度。
希望对您有所帮助
谁能解释一下 LENS_INFO_AVAILABLE_FOCAL_LENGTHS 的工作原理?
文档说:
List of focal lengths for android.lens.focalLength that are supported by this camera device.
If optical zoom is not supported, this list will only contain a single value corresponding to the fixed focal length of the device. Otherwise, this list will include every focal length supported by the camera device, in ascending order.
Units: Millimeters
最后一行说输出应该是我的 phone 相机焦距的浮点数,以毫米为单位测量,但控制台将第一个值打印为:
D/Focal length: 3.95
小于厂家显示的phone焦距:
摩托罗拉 Moto G6 规格。
Aperture f/1.8.
Focal Length 29mm.
我是不是做错了什么? 我正在使用 CameraCharacteristics.get(..) 来检索该值
我想我解决了。我正在回答我自己的问题,以防有人像我一样迷路。
这里的问题是 CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS returns 你相机的真实焦距,手机的小镜头 phone 有几毫米的焦距,但那是不是你拍照时看到的。
这里的关键是获得有效焦距,这是通过将物理 FL 乘以传感器尺寸获得的。后者可以通过以下方式获得:
CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE
并取这些值的斜边
因此您希望 phone 的有效焦距为:
EFL = FL * SIZE
现在我得到一个更可靠的焦距值 25mm
(更多信息在 Anton Gorlin Photography
我也 运行 对此感兴趣,您的回答很有帮助。不过,我想补充一点,公式实际上是:
EFL = FL x CF
CF = Crop Factor,其实不是sensor的大小,而是43.27与sensor大小的比值:
The crop factor is the ratio on the full-frame diagonal to the diagonal of the sensor we calculate. Source: Anton Gorlin Photography
那么,最终公式为:
EFL = FL * (43.27 / SIZE)
FL = LENS_INFO_AVAILABLE_FOCAL_LENGTHS
返回的焦距SIZE = sqrt(sensorWidth * sensorWidth + sensorHeight * sensorHeight)
你可以按照你说的SENSOR_INFO_PHYSICAL_SIZE获取传感器的宽度和高度。
希望对您有所帮助