如何用opencv提高测量精度

时间:2016-09-12 16:14:19

标签: c++ opencv

我最近想测量脚的长度。我使用信用卡作为参考,因为信用卡的大小已知且稳定(8.5cm * 5.4cm),长边'cardL'。我们假设脚的长度是'footL'。

过程:

  1. 用脚和信用卡拍照;

  2. 获取信用卡的轮廓,并使用minAreaRect函数来测量卡的大小,获得卡的长边(cardl)

  3. 使用相同的方法获取足部轮廓并获得足部长度(足球)

  4. 使用公式:cardl:footl = cardL:footL

  5. 例如。我拍了一张照片如下。我测量的脚长是22.4cm。照片中脚的像素长度是2137.6。卡的像素长边是763.14,所以footL = 24cm。这个结果是不精确的。如何提高测量精度?

    eg. I took a photo as follow. I measured the length of foot is 22.4cm. the pixel length of foot in the photo is 2137.6. the pixel long edge of card is 763.14, so footL = 24cm. This result is imprecise. How could I improve the precision of measurement?

    另一个问题是当我拍摄不同高度的照片时(每次脚的像素不同,结果'footL'比实际值大得多,因为高度较小。)

1 个答案:

答案 0 :(得分:1)

我喜欢你的想法!

一些想法;在信用卡定义的平面中测量对象的长度。一种可行的方法:

  • 校准您的相机(感谢@PSchn提醒)
  • 将脚放在地面上的正常位置(不像您提供的图像那样旋转)
  • 将信用卡放在旁边
  • 以包含的角度拍摄照片
    • 整张信用卡(无遮挡)
    • 您要测量的对象的尺寸,例如在你的情况下脚跟到脚跟。
  • 将单应性变换应用于将信用卡投影转换为直线矩形(信用卡大小)的图像。
  • 最后,在上面的列表中应用公式4.