我正在开发一个OpenCV程序来查找从相机到具有已知宽高比的矩形的距离。从正面视图中查找到矩形的距离可以正常工作:
实际距离非常接近于此计算的距离:
wtarget · pimage d = c —————————————————————————— 2 · ptarget · tan(θfov / 2)
w target 是目标的实际宽度(以英寸为单位), p image 是整个图像的像素宽度, p target 是检测到的四边形的最大宽度(以像素为单位)的长度,θ fov 是我们摄像头的FOV。然后乘以一些常数 c 。
从非正向的视角查看目标矩形时会出现问题:
这两个方向之间的实际距离差异很小,但检测到的距离相差近2英尺。
我想知道的是如何一致地计算距离,考虑到不同的透视角度。我已经尝试了getPerspectiveTransform
,但这需要我知道目标的最终比例 - 我只知道纵横比。
答案 0 :(得分:0)
以下是您所知道的:
w_target
)p_target
)所以麻烦的是,当矩形处于一个角度时,你没有考虑p_target
的缩小距离。例如,当矩形旋转45度时,p_target
中的像素将丢失一半,但您的公式假设w_target
是常量,因此您高估了距离。
为了解决这个问题,你应该估计一下盒子转动的角度。我不确定从getPerspectiveTransform
中提取信息的简单方法,但它可能是可能的。您可以设置约束优化,其中决策变量是距离和倾斜角度,并强制执行框中左右点之间的度量距离。
最后,无论你在做什么,都应该确保你的相机已经过校准。根据您的应用程序,您可以使用AprilTags来解决问题。