python - 使用opencv和python计算相机到物体的距离

标签 python opencv image-processing distance

我在我的四轴飞行器上使用 Microsoft Lifecam HD 3000 进行自主着陆。 我希望计算四轴飞行器上的机载摄像头与印有矩形的着陆垫之间的距离。然后,该距离可以作为误差反馈给 PID Controller 。我正在使用 python 来编写这个代码。谁能建议一种简单的方法来找到距离。

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

最佳答案

如果着陆矩形大小已知/恒定,那么这是可行的

  1. 需要准备一些数据

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

    • xs0,ys0 - 矩形大小 [px]
    • d0 - 距相机图像的距离 [m]
  2. 拍摄图像

    找到其上的矩形并尝试将其投影为垂直于相机 View 轴。然后计算其大小(以像素为单位)xs,ys

  3. 计算距离

    使用三角形相似度

    FOV example

    此图片是为此问答而制作的:Specifiyng speed from visual size这可能会有帮助。所以

    • h 是每个轴上的矩形大小(以像素为单位)
    • z 是距相机焦点的距离

    因此重写为上面的名称

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

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

    • d=0.5*(dx+dy) [m]

[注释]

距离是从相机的投影点开始测量的,因此如果您不知道其位置,请从距已知点的 2 个已知距离处获取矩形图像并计算焦点位置...

关于python - 使用opencv和python计算相机到物体的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29249546/

相关文章:

image-processing - DCT 压缩 - block 大小,选择系数

android - 各种光线下的阈值人脸图像

python - 对存储在 n 维 numpy 数组中的所有矩阵进行批处理

c++ - 单独边界框的大小?

python cv2 错误地检测多个图像中的方形

c++ - IplImage 结构的 boost 序列化问题

python - 如何读取中心像素颜色

python - 为什么需要 Homebrew 在 MacOS 上安装 WeasyPrint?可以用Anaconda代替吗?

python - pandas dataframe中 `.value_counts()`的逆向操作是什么?

python - 使用 sqlalchemy 将数据加载到 Oracle 数据库时不允许使用“Multi”方法