Aruco 标记世界坐标

Aruco Marker World Coordinates

我一直在使用 Python 的 OpenCV 库,使用 ArUco 进行对象跟踪。

目标是获取 ArUco 标记中心的 x/y/z 坐标,以及相对于校准相机的角度。

我能够使用目前的代码在 aruco 标记上显示轴,但无法找到如何从旋转和平移向量中获取 x/y/z 坐标(如果这甚至是正确的方法)关于它)。

这是定义 rotation/translation 向量的代码行:

rvec, tvec, _ = aruco.estimatePoseSingleMarkers(corners, markerLength, camera_matrix, dist_coeffs) # For a single marker

关于如何在相机世界中获得 angle/marker 位置的任何想法?

谢谢!

经过一番磨难,我发现aruco中的x和y坐标可以通过角点的平均值来确定:

x = (corners[i-1][0][0][0] + corners[i-1][0][1][0] + corners[i-1][0][2][0] + corners[i-1][0][3][0]) / 4
y = (corners[i-1][0][0][1] + corners[i-1][0][1][1] + corners[i-1][0][2][1] + corners[i-1][0][3][1]) / 4

并且相对于相机的角度可以通过旋转向量的Rodrigues来确定,矩阵必须先填充

rotM = np.zeros(shape=(3,3))
cv2.Rodrigues(rvec[i-1], rotM, jacobian = 0)

最后对旋转矩阵进行RQ Decompose就可以得到yaw pitch和roll

ypr = cv2.RQDecomp3x3(rotM)

正如chungzuwalla所说,tvec表示标记中心在相机坐标系中的位置,它不会随着标记在某个位置的旋转而改变。如果您想知道角点在相机坐标系中的位置,那么需要 rvec 和 tvec。

这里有一个完美的解释