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)
关于如何在相机世界中获取角度/标记位置有什么想法吗?
谢谢!
经过一番折腾,我发现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)
| 归档时间: |
|
| 查看次数: |
10321 次 |
| 最近记录: |