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

Jan*_*joy 5 math camera android opencv dimension

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

如何使用相机测量物体的高度,宽度和距离?

但解决方案并没有帮助我.从上面链接我有一个想法找出距离(测量距离).

有人可以建议我如何获得物体的宽度和高度.简单的数学或任何想法将是非常有帮助的.

有没有可能使用OpenCV实现上述解决方案. 测量高度和宽度

到目前为止我尝试了什么:

在此输入图像描述

假设我们假设固定距离,我们可以计算仰角

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

hence

? = 2*atan(l/2d)
Run Code Online (Sandbox Code Playgroud)

但是我们仍然不知道L的值(物体的长度)

查找视角的另一种方法:

  double thetaV = Math.toRadians(camera.getParameters().getVerticalViewAngle());
  double thetaH = Math.toRadians(camera.getParameters().getHorizontalViewAngle());
Run Code Online (Sandbox Code Playgroud)

似乎不起作用!!

Cim*_*ali 3

例如,佐治亚州立大学的网站解释了透镜的实际物理原理。

\n\n

请参阅此插图,其中解释了如何使用线性放大倍率或焦距关系从图像尺寸找出物体尺寸:

\n\n

带有方程的漂亮镜头插图

\n\n

特别是,-i / h\' = o / h,并且这种关系o / h对于所有相似的三角形都成立(即,2h远处大小的物体在图片上2o具有相同的大小)。h\'正如您所看到的,即使在完整方程的情况下,您也无法同时知道物体的距离o和大小h- 但其中一个会给您另一个。

\n\n

另一方面,距离相同的两个物体o将看到它们的大小h1\',并且h2\'在图像上与它们在现实生活中的大小成比例,h1并且h2,因为h1\' / h1 = M = h2\' / h2

\n\n

因此,如果您知道一个物体的oh,那么您就知道M,从而知道胶片上物体的尺寸,您可以从其距离中推断出其尺寸,反之亦然。

\n\n

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

\n\n

在此输入图像描述

\n\n

这个 \xce\xb1 就是您在示例中命名的 theta 。现在,从图像大小中,您可以了解在什么角度下看到图像 - 也就是说,l如果在远处,图像的大小是多少d。从那里,您可以根据物体的距离推断出物体的大小,反之亦然。

\n\n

算法步骤:

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

这适用于相机实际指向的物体,如果它们没有居中,则数学可能会出错。

\n