我正在开发一个 OpenCV 程序来查找从相机到具有已知长宽比的矩形的距离。求出从前向视图看到的到矩形的距离效果很好:
实际距离与计算出的距离非常接近:
wtarget · pimage
d = c ——————————————————————————
2 · ptarget · tan(θfov / 2)
Where wtarget is the actual width (in inches) of the target, pimage is the pixel width of the overall image, ptarget is the length of the largest width (in pixels) of the detected quadrilateral, and θfov is the FOV of our webcam. This is then multiplied by some constant c.
当从非向前的角度查看目标矩形时,就会出现此问题:
这两个方向之间的实际距离差异很小,但检测到的距离相差近 2 英尺。
我想知道的是如何在考虑不同视角的情况下一致地计算距离。我尝试过getPerspectiveTransform
,但这需要我知道目标的最终比例 - 我只知道纵横比。
这是你所知道的:
- 左上角和右上角之间的距离(以英寸为单位)(
w_target
)
- 这些角之间的距离(以像素为单位)在 2D 平面上 (
p_target
)
所以问题是你没有考虑到距离的缩小p_target
当矩形有一定角度时。例如,当矩形旋转 45 度时,您将丢失大约一半的像素p_target
,但你的公式假设w_target
是常数,所以你高估了距离。
为了解决这个问题,您应该估计盒子转动的角度。我不确定是否有一种简单的方法可以从中提取该信息getPerspectiveTransform
,但这也许是可能的。您可以设置约束优化,其中决策变量是距离和倾斜角度,并强制框上左右点之间的公制距离。
最后,无论您在做什么,都应该确保您的相机已校准。根据您的应用程序,您也许可以使用四月标签 https://april.eecs.umich.edu/wiki/index.php/AprilTags只是为了解决你的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)