如果我们知道相机到物体的距离,是否有可能得到物体被相机聚焦的真实面积?例如,假设我们正在从已知距离拍摄一面墙的照片。有没有可能找到摄像机拍摄到的墙的区域。这是一个Android应用程序,所以有什么API可以帮助我。我得到了一个公式,其中我们必须使用传感器高度,但随着我的研究,它不可能找到所有手机的摄像头传感器大小。
欢迎任何意见。提前感谢您的帮助。
发布于 2013-07-20 19:31:21
我实际上想出了一种方法来解决这个问题。首先,我使用了Camera.Parameters类的getVerticalViewAngle()和getHorizontalViewAngle()方法。我在下面给出的公式中使用了它:
tan(θ/2) = x/2z其中θ是我从上述方法获得的角度,x是对象的高度/宽度(取决于我使用的两种方法中的哪一种),z是对象到相机的距离。
如果你已经正确地测量了距离和持有相机的角度,结果是相当准确的(它必须是平行的,正如@type-alpha所建议的那样)。
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));发布于 2013-07-19 16:54:48
我认为这是可以做到的,但是:
a)手机所在的平面和物体所在的平面需要平行,即摄像头出来的直线必须垂直于曲面进行测量;
b)您需要一个额外的校准步骤(仅在应用程序首次启动时完成一次设置),例如了解y米距离处x米长的对象如何显示在您的屏幕上(必须知道x和y)。例如,知道一个1米长的物体在1米的距离上需要多少像素。注意,校准过程必须遵守a)。
在这一点上,这应该是一个基本的几何问题,因为面积就像距离的平方,而长度与距离成正比。
示例:
请注意,在校准过程中,您可以使用面积而不是长度,但想法是相同的。
还请注意,只有当相机可以被认为是投影的原点时,这才有效,这一点我不太确定。如果它不是投影的原点,那么你需要知道相机/手机平面和理想的投影原点之间的距离w(应该是costant)。在这一点上,您使用与前面相同的过程,请记住,在进行任何计算之前,您需要为每个距离添加w。
注3(然后我停止):您可以用其他方式进行校准,例如知道同一对象在两个不同距离处占用的像素。
https://stackoverflow.com/questions/17738177
复制相似问题