【发布时间】:2021-03-07 07:56:24
【问题描述】:
我试图在此处重复 this 代码以在 Python 上获得真实世界的坐标。但结果并不一致。
我的代码:
uvPoint = np.matrix('222.84; 275.05; 1')
rots = cv2.Rodrigues(_rvecs[18])[0]
rot = np.linalg.inv(rots)
cam = np.linalg.inv(camera_matrix)
leftSideMat = rot * cam * uvPoint;
rightSideMat = rot * _tvecs[18];
s = np.true_divide((4.52 + rightSideMat), leftSideMat)
rot * (s * cam * uvPoint - _tvecs[18])
我的相机矩阵
array([[613.87755242, 0. , 359.6984484 ],
[ 0. , 609.35282925, 242.55955439],
[ 0. , 0. , 1. ]])
旋转矩阵
array([[ 0.73824258, 0.03167042, 0.67379142],
[ 0.13296486, 0.97246553, -0.19139263],
[-0.66130042, 0.23088477, 0.71370441]])
和平移向量
array([[-243.00462163],
[ -95.97464544],
[ 935.8852482 ]])
我不知道 Zconst 是什么,但无论我为 z 常数尝试什么,我什至都无法接近真实世界的坐标,即 (36, 144)。我在这里做错了什么?
【问题讨论】:
-
使用从立体校准过程中获得的 Q 矩阵进行 3D 重投影。见stackoverflow.com/questions/27374970/…
-
我使用的是单相机。这对它有用吗?
-
你从哪里获得深度?如果没有深度。图像中表示射线/线而不是 3D 点的任何像素
-
我想做的是这样的:我把棋盘放在一个平面上,得到一个旋转和平移矩阵。这样我就可以测量同一表面上的平面物体。这可以在 Matlab 上使用 pointstoWorld 来实现。但是我的项目需要在python上完成。
标签: opencv