最近想量脚的长度。我使用信用卡作为引用,因为信用卡的尺寸已知且稳定(8.5cm*5.4cm),长边为“cardL”。我们假设脚的长度是“footL”。
过程:
用脚和信用卡拍照;
获取信用卡的轮廓,并使用minAreaRect函数测量卡片的大小,得到卡片的长边(cardl)
用同样的方法得到脚的轮廓,得到脚的长度(footl)
使用公式:cardl : footl = cardL : footL
例如。我拍了一张照片如下。我测的脚长是22.4cm。照片中脚的像素长度为2137.6。卡片的像素长边为 763.14,所以 footL = 24cm。这个结果是不精确的。如何提高测量精度?
另一个问题是当我在不同高度拍照时(每次脚的像素点都不一样,高度越小,结果'footL'比实际值大很多。)
最佳答案
我喜欢你的想法!
一些想法;在信用卡定义的同一平面内测量物体的长度。一种可行的方法:
- 校准你的相机(感谢@PSchn 的提醒)
- 将脚放在地面上的正常位置(不要像您提供的图片那样旋转)
- 将信用卡放在旁边
- 以这样的角度拍照,它包括
- 整张信用卡(无遮挡)
- 您要测量的物体的尺寸,例如在你的情况下从头到脚。
- 对图像应用单应变换,将信用卡的投影转换为直线矩形(信用卡大小)。
- 最后,在上面的列表中应用公式 4.。
关于c++ - 如何使用opencv提高测量精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39454617/