Python 使用立体视觉计算从对象到摄影机的距离
我一直在试图计算一个物体和我的一个相机(同一型号)之间的距离。 校准后,我成功地得到了以下矩阵。分辨率为600 x 480Python 使用立体视觉计算从对象到摄影机的距离,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
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中的一对校正图像计算视差贴图。另一个参考:。