【问题标题】:Finding distance from camera to object of known size查找从相机到已知尺寸物体的距离
【发布时间】:2011-10-06 13:02:40
【问题描述】:

我正在尝试使用 opencv 编写一个程序来计算从网络摄像头到一英寸白色球体的距离。我觉得这应该很容易,但无论出于何种原因,我都在画一个空白。提前感谢您的帮助。

【问题讨论】:

  • 您是否尝试过“校准”您的系统?我的意思是你可以在球体距离网络摄像头50cm、1m、2m时测量像素大小,然后将实时测量值与校准数据进行比较?
  • 这是个好主意,但如果我打算创建一个跨平台应用程序,可以在各种不同的网络摄像头上运行,每个不同的摄像头都需要自己校准吗?还是相同质量的不同相机(例如 vga)会在每个距离上将球视为相同数量的像素?
  • 不幸的是,您需要对每台相机进行校准,因为很少有相机具有相同的“视角”。有些比其他的更广角(放大),例如:tomshardware.com/reviews/…。所以我知道这不是最好的解决方案。

标签: opencv webcam object-recognition


【解决方案1】:

您可以使用三角形相似度来校准相机角度并找到距离。
您知道球的大小:D 单位(例如厘米)。将其放置在已知距离Z,例如 1 米 = 100 厘米,在相机前面并测量其表观宽度(以像素为单位)。将此宽度称为d
相机f的焦距(与相机略有不同)则为f=d*Z/D

当你用这个相机再次看到这个球时,它的表观宽度是d'像素,然后通过三角形相似度,你知道f/d'=Z'/D,因此:Z'=D*f/d'其中Z'是球当前距离相机。

【讨论】:

  • 相机焦距不是问题吗?智能手机的相机校准不会以米为单位为您提供焦距,而是以 x-y 轴上的像素为单位。它们已乘以比例因子。
  • 第一段解释了如何获取焦距(以像素为单位)。三角形相似度本质上是找到从像素到米的转换比例因子。
  • 我明白你在说什么。不过,简单地保存一个包含图像传感器尺寸和校准的数据库不是同样的麻烦吗?
  • 这两个选项是互补的。校准后,您可以保留数据库。
  • 只有我一个人不会板着脸读“你知道你的蛋蛋大小”吗?
【解决方案2】:

在我看来,如果您想测量距离或其他东西(在现实世界中),您将需要一个相机模型 = 一个校准模型。 针孔相机模型简单、线性且效果良好(但不会校正失真(无论是径向还是切向)。

如果您不使用它,那么您将能够计算视差深度图(例如,如果您使用立体视觉),但它是相对的,并没有给您一个绝对的测量值,只有什么是另一个物体的后面和前面是什么....

因此,我认为答案是:您需要以某种方式对其进行校准,也许您可​​以要求用户将球体靠近相机,直到所有图像平面完全被球填充,并且事先知道球测量,然后你就可以计算距离....

朱利安,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多