【发布时间】:2017-12-23 03:58:39
【问题描述】:
有没有办法检测给定的相机是普通相机还是广角相机?
对于 Oppo、Vivo、LG 等设备,他们使用 Camera2 API 提供对每个相机的访问权限。但是如何知道哪个相机是主相机,哪个相机是广角相机?
【问题讨论】:
有没有办法检测给定的相机是普通相机还是广角相机?
对于 Oppo、Vivo、LG 等设备,他们使用 Camera2 API 提供对每个相机的访问权限。但是如何知道哪个相机是主相机,哪个相机是广角相机?
【问题讨论】:
您可以计算每个摄像头的视野,并确定它是否足够宽以进行计数。
以度为单位的水平视野标准公式是:
FOV = 2 * arctan(sensor_width / (2 * lens_focal_length) )
对于垂直 FOV,使用传感器高度。
通过 camera2 API,焦距在 AVAILABLE_FOCAL_LENGTHS 中列出,传感器物理尺寸在 PHYSICAL_SIZE 中列出。
如果您想完全准确,您还应该考虑active array,它是physical pixel array 的子集,实际用于生成图像。但这通常只是数千像素中的几行。但如果你想考虑到它,你会想要这样的东西:
active_width = sensor_width * active_array_width / pixel_array_width
计算FOV。此外,有时报告的 FOV 是对角线,在这种情况下,您想要的传感器尺寸是
sensor_diagonal = sqrt(sensor_width^2 + sensor_height^2)
对于广角相机没有单一的定义,特别是因为大多数移动设备相机已经在 65-75 度 FOV 范围内。
三星 S8 前置摄像头的 FOV 为 80 度,三星称其为“广角自拍”,而后置摄像头的 FOV 为 77 度。但不确定这些是水平视野还是对角视野。
【讨论】: