相机和物体之间的距离?

时间:2016-09-15 20:43:59

标签: opencv camera distance

我知道已经有一些关于这个主题的答案,但我不太清楚如何测量相机和物体之间的距离。

我的目标:

我设法使用OpenCV跟踪一个带有颜色检测的红球。 现在我试图将激光指向红球中间。激光在移动时应始终跟随红色球。我正在使用小型伺服电机来转动激光器。

Image

我在想是否可以测量物体和相机之间的距离,我将能够计算伺服需要转动的角度......

我试图关注Cameron Lowell Palmer's post

我做了什么:

我校准了我的Pi Camera V2

f_x:463.64
f_y:463.64
c_x:319,50
c_y:239.5

原生分辨率= 3280 x 2464(我想?我不知道如何找到这个......)
焦距= 3.00mm(我想?我不知道如何找到它......)

然后我应该能够以像素为单位测量对象大小?我不知道怎么......

有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:0)

您是否可以通过将像素大小与对象(红球)大小相关联来推断近似距离?回到初等代数,你可以根据它与物体之间已知的距离来推断远处某物的高度。在这种情况下,您已知的是对象大小,像素大小和焦距。

答案 1 :(得分:0)

我设法得到了距离,但它并不是那么精确。

我做了什么:

  • 我按照官方教程
  • 中的说明校准了相机
  • 我使用cameraMatrix和distortionCoeff解压缩了我的图像。使用undistort()函数
  • 我按照here所解释的那样对我的图像进行了阈值处理以过滤出红色的球。
  • 我使用以下公式计算了相机和红球之间的距离:
  

距离= FocalLength,单位为mm *(实际物体宽度,单位为mm)/(虚拟对象宽度,单位为px)

  • 为了获得虚拟对象宽度,我在我的阈值图像周围绘制了一个轮廓(我使用了minEnclosingCircle)。然后我计算了这个轮廓的宽度。
  • 我从函数' calibrationMatrixValues'
  • 中检索了我的focalLength

结果图片Result

距离表(运行代码段):



    <table border="1" style="text-align: center">
    <thead>
      <tr>
        <th>Real Distance (mm)</th>
        <th>Calculated Distance (mm)</th> 
      </tr>
    </thead>
     <tbody>
       <tr>
           <td>100</td> 
           <td>83</td> 
       </tr>
       <tr>
           <td>200</td> 
           <td>174</td> 
       </tr>
       <tr>
           <td>300</td> 
           <td>275</td> 
       </tr>
       <tr>
           <td>400</td> 
           <td>384</td> 
       </tr>
       
     <tbody>   
    </table>
&#13;
&#13;
&#13;

现在,我只为结果添加20毫米。如果有人能帮助我获得更准确的测量结果,我将非常感激: - )。