使用opencv和python进行对象距离计算

时间:2015-03-25 07:12:03

标签: python opencv image-processing distance

我在我的四轴飞行器上使用Microsoft Lifecam HD 3000进行自动着陆。 我想计算四轴飞行器上的机载摄像机和打印有矩形的着陆垫之间的距离。然后可以将距离作为错误馈送到PID控制器。我正在使用python来编写代码。任何人都可以建议一种简单的方法来找到距离。

PS:我不需要确切的距离值

1 个答案:

答案 0 :(得分:2)

如果着陆矩形大小已知/常数,那么它是可行的

  1. 准备一些数据

    以已知距离拍摄着陆矩形的图像。使用 Microsoft Lifecam HD 3000 ,使用与直升机相同的设置(或单独使用),计算/测量矩形大小(以像素为单位)并存储。所以你有:

    • xs0,ys0 - 矩形尺寸[px]
    • d0 - 距摄像机图像的距离为[m]
  2. 拍摄图片

    在其上找到矩形并尝试投影,因为它垂直于摄像机视轴。然后以像素xs,ys

  3. 计算其大小
  4. 计算距离

    使用三角形相似性

    FOV example

    此图片是针对此 Q / A Specifiyng speed from visual size完成的,这可能有所帮助。所以

    • h是每个轴的矩形大小(
    • z是距离相机对焦点的距离

    所以改写为上面的名字

    • dx=d0*xs/xs0 [m]
    • dy=d0*ys/ys0 [m]

    dxdy应该相同,但如果您的图像不垂直或有其他扭曲,那么它们会有所不同。因此,距离是平均值,或者最小值或最大值取决于安全原因。例如

    • d=0.5*(dx+dy) [m]
  5. <强> [注释]

    距离是从相机的投影点测量的,所以如果你不知道它的位置,则从已知点的2个已知距离拍摄矩形图像并计算焦点位置......