我一直在使用Python的OpenCV库,使用ArUco进行对象跟踪。
目的是获得ArUco标记中心的x / y / z坐标以及相对于已校准摄像机的 Angular 。
我可以使用到目前为止的代码在aruco标记上显示轴,但是无法找到如何从旋转和平移 vector 获取x / y / z坐标的方法(如果那是正确的解决方法)。
这是定义旋转/平移 vector 的代码行:
rvec, tvec, _ = aruco.estimatePoseSingleMarkers(corners, markerLength, camera_matrix, dist_coeffs) # For a single marker
关于如何在相机世界中获得 Angular /标记位置的任何想法?
谢谢!
最佳答案
经过一番磨难之后,我发现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
相对于摄像机的 Angular 可以通过旋转 vector 的Rodrigues确定,矩阵必须事先填充
rotM = np.zeros(shape=(3,3))
cv2.Rodrigues(rvec[i-1], rotM, jacobian = 0)
最后,通过旋转矩阵的RQ分解可以获得偏航俯仰和横滚
ypr = cv2.RQDecomp3x3(rotM)
关于python - Aruco标记世界坐标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51270649/