相机和物体之间的距离?
Distance between camera and object?
我知道已经有一些关于这个主题的答案,但我不太清楚如何测量相机和物体之间的距离。
我的目标:
我使用 OpenCV 成功地通过颜色检测跟踪了一个红球。
现在我正试图将激光指向红球的中间。激光在移动时应始终跟随红球。我正在使用小型伺服电机来转动激光。
我在想如果我能测量物体和相机之间的距离,我就能计算出舵机需要转动的角度...
我试着关注 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(我想?我不知道怎么找到这个...)
那么我应该能够以像素为单位测量我的对象大小?我不知道怎么...
有人可以帮我解决这个问题吗?
您能否通过将像素大小与对象(红球)大小相关联来推断出大致距离?回到初等代数,你可以根据已知物体与物体之间的距离推断出远处物体的高度。在这种情况下,您已知的是对象大小、像素大小和焦距。
我设法得到了距离,但它并不准确。
我做了什么:
- 我按照官方教程校准了相机
- 我使用 cameraMatrix 和失真系数消除了我的图像失真。使用 undistort() 函数
- 我按照解释 here.
对我的图像设置了阈值以滤除红球
- 我使用以下公式计算了相机和红球之间的距离:
Distance = FocalLength in mm * (Real object width in mm) / (Virtual object width in px)
- 为了获得虚拟对象的宽度,我在我的阈值图像周围画了一个轮廓(我使用了 minEnclosingCircle)。然后我计算了这个轮廓的宽度。
- 我从函数 'calibrationMatrixValues'
中检索了 focalLength
结果图片: Result
距离table(运行代码段):
<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>
现在,我只在结果上加了 20 毫米。如果有人能帮我得到更准确的测量结果,我将不胜感激:-)。
我知道已经有一些关于这个主题的答案,但我不太清楚如何测量相机和物体之间的距离。
我的目标:
我使用 OpenCV 成功地通过颜色检测跟踪了一个红球。 现在我正试图将激光指向红球的中间。激光在移动时应始终跟随红球。我正在使用小型伺服电机来转动激光。
我在想如果我能测量物体和相机之间的距离,我就能计算出舵机需要转动的角度...
我试着关注 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(我想?我不知道怎么找到这个...)
那么我应该能够以像素为单位测量我的对象大小?我不知道怎么...
有人可以帮我解决这个问题吗?
您能否通过将像素大小与对象(红球)大小相关联来推断出大致距离?回到初等代数,你可以根据已知物体与物体之间的距离推断出远处物体的高度。在这种情况下,您已知的是对象大小、像素大小和焦距。
我设法得到了距离,但它并不准确。
我做了什么:
- 我按照官方教程校准了相机
- 我使用 cameraMatrix 和失真系数消除了我的图像失真。使用 undistort() 函数
- 我按照解释 here. 对我的图像设置了阈值以滤除红球
- 我使用以下公式计算了相机和红球之间的距离:
Distance = FocalLength in mm * (Real object width in mm) / (Virtual object width in px)
- 为了获得虚拟对象的宽度,我在我的阈值图像周围画了一个轮廓(我使用了 minEnclosingCircle)。然后我计算了这个轮廓的宽度。
- 我从函数 'calibrationMatrixValues' 中检索了 focalLength
结果图片: Result
距离table(运行代码段):
<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>
现在,我只在结果上加了 20 毫米。如果有人能帮我得到更准确的测量结果,我将不胜感激:-)。