将以毫米为单位的焦距转换为像素 - Android

5
在Android中,我目前通过在Camera1中使用getFocalLength()来访问相机的焦距。Camera2不是一个选项。
我正在尝试完成当前的计算:focal_length_pix = focal_length_m * 1(pix) / pixel_width_m。
基本上,这将把焦距从mm转换为px。现在我知道focal_length_m变量,但我正在努力找出pixel_width_m,它是以米为单位的传感器上像素的宽度。
我正在努力找到一种计算传感器上像素宽度的方法。任何建议或想法都将不胜感激。

最好将所有像素值转换为米,这样更有意义。 - Piglet
1
@piglet如上所述,我获取了以毫米为单位的焦距。我正在尝试获取pixel_width_m。您对如何实现有任何有用的信息或指导吗?相机本身将位于任何Android设备上。因此,每个OEM都会有所不同。目前正在S7上进行测试。 - David Biga
1
如果像素尺寸没有直接给出,则只需将传感器尺寸按每个维度的像素数进行划分。 - Piglet
@piglet 我能在 android 中访问像素尺寸吗? - David Biga
https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#SENSOR_INFO_PHYSICAL_SIZE - Piglet
显示剩余5条评论
1个回答

8

您可以通过以下方式计算以像素为单位的焦距:

double focal_length_pix = (size.width * 0.5) / tan(horizontalAngleView * 0.5 * PI/180);

size来自于getPreviewSize()


很好了解。您是否建议手动校准每个设备(或每个型号)的水平视角,然后在代码中进行枚举查找? - WillC
在我们的情况下,我们需要摆脱“每个设备/型号”的配置进行比较。有成千上万的设备,似乎每天都会出现新的设备。最好的选择是使用百分比。我认为,制造商提供适当的规格对未来是有希望的。 - David Biga
同意制造商按照他们应该做的去做是好事。我如何在使用Camera 1 API / Android 19 API时找到或计算你提到的那些百分比? - WillC
谢谢你的建议。如果你有时间,还有一个补充问题:你觉得camera.getParameters().getFocalLength()方法可靠吗? - WillC
你需要在你的端上创建阈值来允许一个可接受的范围。例如,如果你知道视角可能不总是准确的,就要考虑平均值。概括一下。至于你的第二个问题,我记不太清了,但我想说大约有20-30%的误差。如上所述,相机传感器包含这个值,Android从包含传感器信息的表中调用getter。据我所知,它不会运行计算。制造商应该知道这一点并提供正确的信息。希望这可以帮助到你。 - David Biga
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接