- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想确定一个物体与我的 Nexus 5 相机的距离,最好不要使用硬币等物体作为比例尺。我认为 Camera.Parameters getFocusDistances 函数适用于此。
我试图通过我的 takePicture() jpeg 回调中的类似以下内容来执行此操作:
Parameters params = camera.getParameters();
Float focusDistances[] = new float [3];
params.getFocusDistances( focusDistances );
我尝试对距离相机不同距离的物体运行几次,尽管每次 focusDistances[FOCUS_DISTANCE_NEAR_INDEX]、focusDistances[FOCUS_DISTANCE_OPTIMAL_INDEX] 和 focusDistances[FOCUS_DISTANCE_FAR_INDEX] 都包含正无穷大值。
可能我做错了什么,在这种情况下,请告诉我是否有特定的方法可以在 Nexus 5 上运行。但是,android API 明确指出您可以调用 getParameters()(然后 getFocusDistances()) 随时获取最新的焦距,因此我认为这应该有效。我还没有尝试过的一件事是在自动对焦处理程序中执行上述操作,但我不明白为什么这很重要。
我做了一些研究,试图看看发生了什么,我从 getFocusDistances() 中发现了几个关于这种行为的问题,通常的答案是,如果有的话,android 不支持该功能API 和/或硬件制造商。现在我在网上发现的很多这些讨论都是几年前的事了,尽管它给我带来了关于 getFocusDistances 的可疑感觉,但我仍然看到这个函数被建议用于获取焦距,所以我认为它必须适用于某些一些 android API 版本的设备。
有人知道 getFocusDistances() 是否适用于 Nexus 5 上的任何特定版本的 android 吗?如果没有,有人知道它可以在任何设备上运行吗?
编辑:
自发布以来,我已尝试在 onAutoFocus 处理程序中获取焦距,并尝试更广泛地获取各种距离的对象。结果是一致的——所有 3 个焦距(NEAR、OPTIMAL 和 FAR)总是返回正无穷大。我什至在 Nexus 7 上尝试过这个,getFocusDistances 总是返回常量值(0.95、1.9 和无穷大),所以显然 getFocusDistances 也没有在该设备上实现。
因此,我真的有两个问题:
有没有什么方法可以在 Nexus 5 上使用 android Camera API 获得比较准确的焦距?我什至想知道是否有实际实现 getFocusDistances 的自定义 android 版本,否则我可能会尝试自己这样做,具体取决于我在检查 API 代码时发现的内容。
是否有任何已知的支持 android 的设备能够以某种程度准确的方式实现 getFocusDistances?
最佳答案
首先,很难通过单次拍摄/ View 测量物距。你会发现许多研究论文试图采用基于视觉的技术来判断物距。我可以推荐给你一个这样的paper .他们试图实现一个仅适用于移动摄像头+传感器的定位系统。您可能会意识到从一个单一的相机 View 测量物体距离是多么的重要。他们最终使用一种称为“运动结构”视觉技术的方法来计算距离(从多个角度拍摄的多张照片)。
即使是 SmartDistance 和 SmartMeasure 等传统应用程序也需要使用几何技巧来测量距离。他们都不能只依靠相机参数。抱歉拉长了介绍。我以前做过这样的项目,我根据我的经验告诉你所有这些。
为了回答您的问题,我还没有找到任何返回实际焦距值的 Android 设备。它们要么作为一些常量值返回,要么有时返回 0 和无穷大。我发现有人报告说它适用于 Galaxy Nexus,但只能在 30 厘米的物距内使用,它不适用于超过 30 厘米的距离。最重要的是,您不能依赖严重依赖设备驱动程序的相机 API 中的此功能。而且,手机摄像头的镜头/传感器质量并不为人所知。你很难研究任何基于光学的手机相机公式。我建议您宁愿选择一些基于传感器的几何技巧。
关于java - getFocusDistances() 相机 API 函数是否真的适用于 Nexus 5?或任何其他设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25447632/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!