【问题标题】:Finding distance of rectangle with known aspect ratio in OpenCV在OpenCV中查找具有已知纵横比的矩形的距离
【发布时间】:2016-05-07 12:21:44
【问题描述】:

我正在开发一个 OpenCV 程序,以查找从相机到具有已知纵横比的矩形的距离。从前向视图中查找到矩形的距离可以正常工作:

实际距离和这样计算的距离很接近:

 wtarget · pimage
d = c —————————————————————————————
       2 · ptarget · tan(θfov / 2)

其中 wtarget 是目标的实际宽度(以英寸为单位),pimage 是整个图像的像素宽度,ptarget是检测到的四边形的最大宽度(以像素为单位)的长度,θfov是我们网络摄像头的 FOV。然后乘以某个常数c。

当目标矩形从非正向的角度查看时会出现此问题:

这两个方向之间的实际距离差异很小,但检测到的距离相差近 2 英尺。

我想知道的是如何在考虑不同视角的情况下一致地计算距离。我已经尝试过getPerspectiveTransform,但这需要我知道目标的最终比例——我只知道纵横比。

【问题讨论】:

  • 是否可以让您在首次使用时拼出缩写 (SOAWFU)?什么是视场?那是相机镜头的视野角度吗?是否可以将倾斜的框标准化为相机镜头,并以这种方式计算距离? (使用中点将透视框转换为纯矩形,然后使用普通视图计算确定距离?)
  • @zipzit 是的,它是相机的水平视野。似乎使用中点会创建一个平行四边形。不知道我会用这个平行四边形做什么。
  • 这是一个很棒的答案,演示与执行 css 实现的计算相关:How to match 3D perspective of real photo and object in CSS3 3D transforms

标签: c++ opencv distance


【解决方案1】:

这是你知道的:

  1. 左上角和右上角之间的距离(以英寸为单位) (w_target)
  2. 在 2D 平面上(p_target)

所以问题在于,当矩形成一定角度时,您没有考虑到 p_target 的缩小距离。例如,当矩形旋转 45 度时,p_target 中的像素将丢失大约一半,但您的公式假定 w_target 是恒定的,因此您高估了距离。

为了解决这个问题,您应该估计盒子转动的角度。我不确定从getPerspectiveTransform 中提取该信息的简单方法,但它可能是可能的。您可以设置一个约束优化,其中决策变量是距离和倾斜角,并在框上的左右点之间强制执行公制距离。

最后,无论您在做什么,都应确保您的相机已校准。根据您的应用程序,您也许可以使用AprilTags 来解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2021-10-20
    • 2014-03-12
    • 1970-01-01
    • 2018-08-21
    • 2015-11-20
    相关资源
    最近更新 更多