我在我的四轴飞行器上使用 Microsoft Lifecam HD 3000 进行自主着陆。 我希望计算四轴飞行器上的机载摄像头与印有矩形的着陆垫之间的距离。然后,该距离可以作为误差反馈给 PID Controller 。我正在使用 python 来编写这个代码。谁能建议一种简单的方法来找到距离。
PS:我不需要距离的精确值
最佳答案
如果着陆矩形大小已知/恒定,那么这是可行的
需要准备一些数据
拍摄已知距离处的着陆矩形的图像。使用与直升机上相同设置的 Microsoft Lifecam HD 3000(或单独使用),计算/测量矩形尺寸(以像素为单位)并将其存储。所以你有:
xs0,ys0
- 矩形大小 [px]d0
- 距相机图像的距离 [m]
拍摄图像
找到其上的矩形并尝试将其投影为垂直于相机 View 轴。然后计算其大小(以像素为单位)
xs,ys
计算距离
使用三角形相似度
此图片是为此问答而制作的:Specifiyng speed from visual size这可能会有帮助。所以
h
是每个轴上的矩形大小(以像素为单位)z
是距相机焦点的距离
因此重写为上面的名称
dx=d0*xs/xs0
[m]dy=d0*ys/ys0
[m]
dx
和dy
应该是相同的,但如果您的图像不是垂直的或有其他扭曲,那么它们会有点不同。因此距离是其平均值或最小值或最大值取决于安全原因。例如d=0.5*(dx+dy)
[m]
[注释]
距离是从相机的投影点开始测量的,因此如果您不知道其位置,请从距已知点的 2 个已知距离处获取矩形图像并计算焦点位置...
关于python - 使用opencv和python计算相机到物体的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29249546/