Opencv视觉学习--单目测距

对于刚开始学习Opencv的朋友们,查找资料是自学最好的方式。
这一篇博客,我将介绍Opencv单目测距的操作,如有问题或建议可留言于我,谢谢!
更多资料请点击:我的目录

单目测距需要用到四个参数: 被测物的实际宽度W(实际测量)
被测物的像素宽值P  (相机输出)
被测物与相机距离D
相机焦距               F 

两个公式: 求焦距: F = ( P * D ) / W
求实距: D = ( W * F ) / P

操作步骤:
① 求出相机的准确焦:根据几组自定义数据,测出被测物的实际宽度W,设定适当的被测物与相机距离D,算出准确的焦距,再给镜头焦距定值。
②精确装甲板两矩形中点实际距离:先用尺子量出最准确的长度进行初调,在给镜头焦距定值后,通过预测距离D的测量值与实际值对比,给定最合适的实际距离。
③实现单目测距:通过步骤①②,已有较精确的W、F,此时就能直接运用求实距的公式实现测距。若输出结果与实际误差较大,那就需要重新①②步骤了。

源码:

float distanceCamera(const RotatedRect r1, const RotatedRect r2)
{
    float x1 = r1.center.x;
    float y1 = r1.center.y;
    float x2 = r2.center.x;
    float y2 = r2.center.y;
    float rectans_distance = sqrt(pow(x1-x2,2)+pow(y1-y2,2));     //俩轮廓中心距
    unsigned int half_girth = r1.size.width+r1.size.height;           //二分之一周长
    unsigned int  Actual_length;
    float aspect_ratio = rectans_distance / half_girth;
    if(aspect_ratio  >3.6550)
    {
        Actual_length =2300 ;   //大 两轮廓中心点实际距离 mm
    }
    else
    {
         Actual_length =1350;   //小 两轮廓中心点实际距离 mm
    }
//         float  focal_length  = 7.00;   //普通相机焦距 mm
         float  focal_length  = 10.3;   //工业相机焦距 mm
         float  Distance_to_camera = ( Actual_length * focal_length )/rectans_distance;   //装甲板到相机的距离 cm
         return Distance_to_camera;
  //       return aspect_ratio;
}

更多资料请点击:我的目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佳佳鸽

若文章帮到你,能不能请我喝杯茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值