【问题标题】:Measuring size of object with OpenCV用 OpenCV 测量物体的大小
【发布时间】:2017-08-30 01:17:18
【问题描述】:

我已校准相机和未失真的图像,图像上的对象已二值化,仅显示轮廓。然后我使用矩形来获取对象的尺寸 - >我有像素距离。相机位置固定,校准后与物体的距离也固定。

红色矩形的大小 ~ 81×630 像素。

有没有办法仅使用 OpenCV 校准将像素转换为毫米,或者我应该测量具有已知尺寸的对象的像素大小?

【问题讨论】:

  • 你所要求的在物理上是不可能的:除非你知道焦点和你正在测量的东西之间的距离,否则你不能用单目相机测量东西:1m 宽、2m 远的东西将有与距离 1m 的 2m 对象相同的图像(像素)大小。还是您的问题需要澄清一下?
  • 相机总是在同一个地方。我认为由于校准,我将能够测量一些东西,因为校准网格的大小是已知的。
  • @kebs 我认为你的类比出了点问题 - 我无法相信距离较远的较小物体会与较近的较大物体形成相同的角度。
  • @MarkSetchell 糟糕,正确!恰恰相反,我的意思是“2m 宽、2m 远的物体与 1m 远、1m 远的物体具有相同的图像(像素)大小。”
  • 您知道镜头的焦距和传感器尺寸(单位为毫米和像素)吗? stackoverflow.com/a/28820333/2836621

标签: c++ opencv measurement


【解决方案1】:

您可以使用相同的相机选项拍摄卡尺。然后,您可以将距离与像素数相匹配。然后,您可以使用匹配计算图像中对象像素的相应距离。

样品卡尺图像:

【讨论】:

  • 我不认为这是可行的,除非你知道一些相机参数,如 cmets 和here 中提到的。另外,为了准确起见,您必须处理直线的失真
  • 我不知道相机参数,但图片不失真——我使用OpenCV校准网格。我会试试这个解决方案。
  • 好的,校准后我在校准网格上测量了一个圆圈的像素大小(这与您的答案相似,因为我知道它的真实大小),OpenCV 测量的高度为 135,84 mm实际为 135.1 毫米。
【解决方案2】:

你可以用尺子得到你正在看的物体的实际大小,然后将你正在描绘的物体的像素数乘以一个与实际大小相同的数字 而且由于相机经过校准,您找到的几率适合所有人。

【讨论】:

    猜你喜欢
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多