首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用相机和相机与物体之间的已知距离测量物体的面积

问使用相机和相机与物体之间的已知距离测量物体的面积
EN

Stack Overflow用户
提问于 2013-07-19 12:37:47
回答 2查看 3.2K关注 0票数 0

如果我们知道相机到物体的距离,是否有可能得到物体被相机聚焦的真实面积?例如,假设我们正在从已知距离拍摄一面墙的照片。有没有可能找到摄像机拍摄到的墙的区域。这是一个Android应用程序,所以有什么API可以帮助我。我得到了一个公式,其中我们必须使用传感器高度,但随着我的研究,它不可能找到所有手机的摄像头传感器大小。

欢迎任何意见。提前感谢您的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-20 19:31:21

我实际上想出了一种方法来解决这个问题。首先,我使用了Camera.Parameters类的getVerticalViewAngle()和getHorizontalViewAngle()方法。我在下面给出的公式中使用了它:

tan(θ/2) = x/2z其中θ是我从上述方法获得的角度,x是对象的高度/宽度(取决于我使用的两种方法中的哪一种),z是对象到相机的距离。

如果你已经正确地测量了距离和持有相机的角度,结果是相当准确的(它必须是平行的,正如@type-alpha所建议的那样)。

代码语言:javascript
复制
Camera.Parameters cp = camera.getParameters();
    double distance = Double.parseDouble(editText.getText().toString());
    /*double height = distance * 2.57/cp.getFocalLength();
    double width = distance * 3.42/cp.getFocalLength();*/
    double realheight = 2 * distance * Math.tan(Math.toRadians(cp.getVerticalViewAngle() / 2));
    double realwidth = 2 * distance * Math.tan(Math.toRadians(cp.getHorizontalViewAngle() / 2));
票数 0
EN

Stack Overflow用户

发布于 2013-07-19 16:54:48

我认为这是可以做到的,但是:

a)手机所在的平面和物体所在的平面需要平行,即摄像头出来的直线必须垂直于曲面进行测量;

b)您需要一个额外的校准步骤(仅在应用程序首次启动时完成一次设置),例如了解y米距离处x米长的对象如何显示在您的屏幕上(必须知道x和y)。例如,知道一个1米长的物体在1米的距离上需要多少像素。注意,校准过程必须遵守a)。

在这一点上,这应该是一个基本的几何问题,因为面积就像距离的平方,而长度与距离成正比。

示例:

  • 校准:1米远、1米长的物体需要10个像素。所以你知道,在1米处,屏幕上形成一个连通表面的100个像素大致相当于1米squared.
  • problem实例:3米外的对象在2米处取150个像素的screen.
  • solution:,100个像素是4米^2。在3米处,100个像素是9米^2。然后在3米处,你的150个像素对应于13.5米^2。

请注意,在校准过程中,您可以使用面积而不是长度,但想法是相同的。

还请注意,只有当相机可以被认为是投影的原点时,这才有效,这一点我不太确定。如果它不是投影的原点,那么你需要知道相机/手机平面和理想的投影原点之间的距离w(应该是costant)。在这一点上,您使用与前面相同的过程,请记住,在进行任何计算之前,您需要为每个距离添加w。

注3(然后我停止):您可以用其他方式进行校准,例如知道同一对象在两个不同距离处占用的像素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17738177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档