使用相机查找对象的尺寸(高度、宽度)

Posted

技术标签:

【中文标题】使用相机查找对象的尺寸(高度、宽度)【英文标题】:Find the Dimensions (Height ,width) of an Object using Camera 【发布时间】:2016-07-20 21:05:45 【问题描述】:

我想找到使用相机获取对象尺寸的解决方案,听起来像是复制一个

How to measure height, width and distance of object using camera?

但是解决方案并没有帮助我。好吧,从上面的链接中我得到了一些了解距离的想法 (Measure Distance)。

有人可以建议我如何获得对象的宽度和高度。简单的数学或任何想法都会很有帮助。

是否有可能使用 OpenCV 实现上述解决方案。 Measure Height and Width

到目前为止我所做的尝试:

假设我们假设固定距离,我们可以计算Angle of elevation

tan(α/2) = (l/2)/d,

hence

α = 2*atan(l/2d)

但我们仍然不知道 L(对象的长度)的值

另一种寻找视角的方法:

  double thetaV = Math.toRadians(camera.getParameters().getVerticalViewAngle());
  double thetaH = Math.toRadians(camera.getParameters().getHorizontalViewAngle());

好像不行!!

【问题讨论】:

【参考方案1】:

例如在this website of Georgia State University 上解释了镜头的实际物理特性。

请参阅此插图,它解释了如何使用线性放大率或焦距关系从图像大小中找出对象大小:

特别是-i / h' = o / h,这种关系o / h 适用于所有相似的三角形(也就是说,距离2o 的大小为2h 的对象在图片上具有相同的大小h')。如您所见,即使在完整方程的情况下,您也无法同时知道一个对象的距离o 和大小h——但是一个会给你另一个。

另一方面,距离相同的两个对象o 将在图像上看到它们的尺寸h1'h2' 与它们在现实生活中的尺寸h1h2 成正比,因为@987654336 @。

因此,如果您知道oh 的一个物体,您就知道M,因此知道物体在胶片上的大小,您可以从它的距离中减去它的大小,反之亦然。

-i / h' 值自然表示为最大 h'。如果一个对象的大小正好填满了图像,它填满了视野,那么它的距离与它的大小的比率是tan(α/2) = (l / 2) / d(注意在下图中的约定中,d = ol = 2 * h) .

这个 α 就是您在示例中命名的 theta。现在,从图像大小你可以得到你在什么角度看到图像——也就是说,如果图像在距离d 处,图像会是什么大小l。从那里,您可以从距离推断对象的大小,反之亦然。

算法步骤:

    获取比率r = size of object in image (in px) / total size of image (in px). 当然,沿着您知道或计划获得真实对象大小的轴执行此操作。 得到相应的视野和角度乘以 r 乘以该角度的一半的正切r *= tan(camera.getParameters().getXXXXViewAngle() / 2) r 现在是您看到对象的半角的切线,因此以下关系成立:r = (l / 2) / d = h / o(使用相应的绘图符号)。 如果你知道d到对象的距离,它的大小是l = 2 * r * d 如果你知道物体的大小l,它在距离是d = l / (2 * r)

这适用于相机实际指向的对象,如果它们没有居中,则数学可能会关闭。

【讨论】:

输出值是多少?毫米还是厘米? @AnasAhamed 在您使用的任何单位中用于ld 好的,谢谢。我还有一个澄清。相机参数有水平和垂直视角。在这里,我需要使用垂直高度和水平宽度作为对象的宽度。我说的对吗? @AnasAhamed 是的 我已经用 3 cm 的物体进行了测试。但它显示 12 厘米。你能帮我吗?

以上是关于使用相机查找对象的尺寸(高度、宽度)的主要内容,如果未能解决你的问题,请参考以下文章

如何仅在 iOS 中使用相机计算不同对象的高度和宽度?

如何获取对象的高度和宽度?

给定最小宽度和最小高度时获取图像的新图像尺寸

尺寸,只改变宽度/高度

如何在 EaselJS 中查找 DisplayObject 的宽度和高度

在将对象添加到场景后如何更新宽度,高度? Three.PlaneGeometry(宽度,高度,1,1)