Aruco 标记世界坐标

Kar*_*son 4 python opencv image-processing computer-vision aruco

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

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

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

这是定义旋转/平移向量的代码行:

rvec, tvec, _ = aruco.estimatePoseSingleMarkers(corners, markerLength, camera_matrix, dist_coeffs) # For a single marker
Run Code Online (Sandbox Code Playgroud)

关于如何在相机世界中获取角度/标记位置有什么想法吗?

谢谢!

Kar*_*son 5

经过一番折腾,我发现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
Run Code Online (Sandbox Code Playgroud)

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

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

最后,通过旋转矩阵的RQ分解可以得到偏航俯仰和横滚

ypr = cv2.RQDecomp3x3(rotM)
Run Code Online (Sandbox Code Playgroud)