Python 使用立体视觉计算从对象到摄影机的距离

Python 使用立体视觉计算从对象到摄影机的距离,python,opencv,distance,disparity-mapping,camera-matrix,Python,Opencv,Distance,Disparity Mapping,Camera Matrix,我一直在试图计算一个物体和我的一个相机(同一型号)之间的距离。 校准后,我成功地得到了以下矩阵。分辨率为600 x 480 Left Camera Matrix [[624.65871068 0. 279.196958 ] [ 0. 637.37379116 267.35689643] [ 0. 0. 1. ]] Left Distortion Coefficients [[ 0.07129149

我一直在试图计算一个物体和我的一个相机(同一型号)之间的距离。 校准后,我成功地得到了以下矩阵。分辨率为600 x 480

Left Camera Matrix
[[624.65871068   0.         279.196958  ]
 [  0.         637.37379116 267.35689643]
 [  0.           0.           1.        ]]
Left Distortion Coefficients
[[ 0.07129149 -0.32551738  0.00165004  0.00582742  0.55830776]]
Right Camera Matrix
[[628.54997755   0.         278.88536288]
 [  0.         638.88299319 262.29519192]
 [  0.           0.           1.        ]]
Right Distortion Coefficients
[[ 0.05281363 -0.20836547  0.0015596   0.00694854 -0.18818856]]
Calibrating cameras together...
Rotation Matrix
[[ 9.78166692e-01 -2.92706245e-02 -2.05750220e-01]
 [ 2.87961989e-02  9.99571250e-01 -5.30056367e-03]
 [ 2.05817156e-01 -7.39989429e-04  9.78590185e-01]]
Translation Vector
[[6.87024126]
 [0.33698621]
 [0.82946341]]
如果我能从两个摄像机中检测到一个物体,让我们假设在左摄像机的像素(a,b)和右摄像机的像素(c,d)中发现一个物体。有什么方法可以得到一个摄像机到物体的距离吗

另外,我的脚本实现了cv2.stereopRective和cv2.initUndistortionpRectivingMap,它们可以用来获得固定帧,然后使用cv2.StereoBM_create()计算深度贴图。嗯,老实说,我不确定这是否可以用来计算距离


谢谢

在计算到摄像机的距离时,需要从(通常为“左”)摄像机矩阵中了解两个参数:(1)基线;(2) 焦距

通常我们使用“左”图像作为主要参考图像,因为大多数情况下,我们基于左图像计算深度贴图/视差图像

在左图上获得对象(x,y)的坐标后,可以反转公式并计算Z距离,如下所示:


参考资料:

谢谢!如果y值略有不同(b!=d),该怎么办?那怎么计算呢?可能是因为立体摄像机没有完全对齐安装。你应该(1)进行校准和计算摄像机矩阵;(2) 进行图像校正;(3) 从立体图像对生成视差图;(4) 定位左图上的坐标(x,y);(5) 计算距离。因为世界和你的校准都不是完美的,你的矩阵中也可能有小的误差。所以我想3~5像素之间的小间隙通常是一个合理的公差。@Howrad GENG谢谢!!如果可以的话,你能告诉我假设我有校正过的图像,得到深度图的详细计算方法吗?我不能很好地从Bf/Z=x-x'推导出方程,你可以看看我答案中的参考。这里有一个示例,说明如何从python中的一对校正图像计算视差贴图。另一个参考:。