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获取传感器的宽度和高度。

希望对您有所帮助