首页 / JAVA / java – 相似的Camera.Parameters.getHorizontalViewAngle()和Camera.Parameters.getVerticalViewAngle()的And
java – 相似的Camera.Parameters.getHorizontalViewAngle()和Camera.Parameters.getVerticalViewAngle()的And
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 相似的Camera.Parameters.getHorizontalViewAngle()和Camera.Parameters.getVerticalViewAngle()的And,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2421字,纯文字阅读大概需要4分钟。
内容图文
![java – 相似的Camera.Parameters.getHorizontalViewAngle()和Camera.Parameters.getVerticalViewAngle()的And](/upload/InfoBanner/zyjiaocheng/762/13a87f72213f4abeb6b8a8a5f714d27e.jpg)
这一切都在标题中,但在现已弃用的Android Camera API中,有两种方法:Camera.Parameters.getHorizo??ntalViewAngle()和Camera.Parameters.getVerticalViewAngle().
现在,使用当前的Camera2 API,似乎在文档中没有相应的内容.我假设这是因为FOV角度比简单的水平和垂直值更复杂和细微,但我在网上找不到有关如何使用较新的Camera2 API计算Android设备的总视野的任何信息.
解决方法:
基本公式是
FOV.x = 2 * atan(SENSOR_INFO_PHYSICAL_SIZE.x / (2 * LENS_FOCAL_LENGTH))
FOV.y = 2 * atan(SENSOR_INFO_PHYSICAL_SIZE.y / (2 * LENS_FOCAL_LENGTH))
这是一个approximation假设一个理想的镜头等,但通常足够好.
这计算整个传感器像素阵列的FOV.
但是,给定输出的实际视野会更小;首先,传感器的读出区域通常小于全像素阵列,因此不需要直接使用PHYSICAL_SIZE,而是首先按像素阵列像素数与有效数组像素数的比例进行缩放(SENSOR_INFO_ACTIVE_ARRAY_SIZE / SENSOR_INFO_PIXEL_ARRAY_SIZE) .
然后,视场取决于您配置的输出的纵横比(16:9 FOV将不同于4:3 FOV),相对于有源阵列的纵横比,以及裁剪区域的纵横比(数字变焦)如果小于完整的活动阵列.
每个输出缓冲区将最小化进一步裁剪cropRegion以获得相应的捕获请求以达到正确的输出宽高比. (http://source.android.com/devices/camera/camera3_crop_reprocess.html有图表).
所以我们假设我们有一个像素数组为(120,120)的传感器,我们有一个有效的数组矩形(10,10) – (110,110),所以宽度/高度为100,100.
我们配置两个输出,输出A是(40,30),输出B是(50,50).让我们将作物区域保持在最大值(0,0) – (100,100).
输出A和B的水平FOV将是相同的,因为最大区域裁剪将导致两个输出使用完整的有效阵列宽度:
output_physical_width = SENSOR_INFO_PHYSICAL_SIZE.x * ACTIVE_ARRAY.w / PIXEL_ARRAY.w
FOV_x = 2 * atan(output_physical_width / (2 * LENS_FOCAL_LENGTH))
但是,垂直FOV会有所不同 – 由于纵横比不匹配,输出A仅使用垂直空间的3/4:
active_array_aspect = ACTIVE_ARRAY.w / ACTIVE_ARRAY.h
output_a_aspect = output_a.w / output_a.h
output_b_aspect = output_b.w / output_b.h
output_a_physical_height = SENSOR_INFO_PHYSICAL_SIZE.y * ACTIVE_ARRAY.h / PIXEL_ARRAY.h * output_a_aspect / active_array_aspect
output_b_physical_height = SENSOR_INFO_PHYSICAL_SIZE.y * ACTIVE_ARRAY.h / PIXEL_ARRAY.h * output_b_aspect / active_array_aspect
FOV_a_y = 2 * atan(output_a_physical_height / (2 * LENS_FOCAL_LENGTH))
FOV_b_y = 2 * atan(output_b_physical_height / (2 * LENS_FOCAL_LENGTH))
当输出宽高比为< =有源阵列宽高比(letterboxing)时,上述工作原理;如果不是这样,则输出水平尺寸减小,垂直尺寸覆盖整个有源阵列(柱箱).然后,水平方向的比例因子为active_array_aspect / output_aspect. 如果要计算放大视图的FOV,请将裁剪区域尺寸/纵横比替换为活动阵列尺寸/纵横比.
内容总结
以上是互联网集市为您收集整理的java – 相似的Camera.Parameters.getHorizontalViewAngle()和Camera.Parameters.getVerticalViewAngle()的And全部内容,希望文章能够帮你解决java – 相似的Camera.Parameters.getHorizontalViewAngle()和Camera.Parameters.getVerticalViewAngle()的And所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。