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