Aruco Marker World Coordinates

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Aruco Marker World Coordinates相关的知识,希望对你有一定的参考价值。

我一直在使用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

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

谢谢!

答案

在经历了一些苦难之后,我发现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)
另一答案

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

这是一个完美的解释

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

以上是关于Aruco Marker World Coordinates的主要内容,如果未能解决你的问题,请参考以下文章

week63 PnP位姿估计 基于ArUco Marker来估算camera的位姿

ros之自定义message

杂记7--opencv的ar码模块学习

使用Python,OpenCV生成Aruco标记

算法库: aruco安装配置

带有openCv的Aruco标记,获取3d角坐标?