Aruco Marker World Coordinates

问题描述 投票:3回答:2

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

目标是将x / y / z坐标置于A​​rUco标记的中心,以及相对于校准摄像机的角度。

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

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

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

关于如何在相机世界中获得角度/标记位置的任何想法?

谢谢!

python opencv image-processing computer-vision aruco
2个回答
2
投票

在经历了一些苦难之后,我发现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分解可以获得偏航俯仰和滚转

ypr = cv2.RQDecomp3x3(rotM)

0
投票

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

这是一个完美的解释

Aruco markers with openCv, get the 3d corner coordinates?

© www.soinside.com 2019 - 2024. All rights reserved.