以前在网上浏览到一篇英文文章,讲的是如何利用opencv实现图像目标尺寸检测,不过原文的实现代码是python;对于java程序员来说不方便调用,故本人采用java语言实现了同样的功能(由于精力及技术问题,延至今日才有java版本的实现),代码未有完善之处,如相关方法的参数值等,尚需后续补充
原文地址:https://www.pyimagesearch.com/2016/03/28/measuring-size-of-objects-in-an-image-with-opencv/
在此感谢原作者及网上相关参考文章(特别是雷锋网的翻译版本,貌似链接已经失效)
其基本思路是先获取图片中图像目标的轮廓,然后获取其旋转矩阵,并对旋转矩阵的坐标顺时针排序,然后获取其矩阵边框的中点坐标,最后是计算对称中点的欧氏距离(像素),最后再根据参照物的像素与英寸的比例计算实际距离
部分java代码
1 | /** |
最后效果如图:
我们发现,其中的测量对象的尺寸并不是百分之百准确,原文分析了两个原因:
1)图像的拍摄视角问题,不是绝对的90度角度
2)拍摄相机的相关参数校准问题