gpt4 book ai didi

python-2.7 - 如何获得世界坐标中Aruco Markers的axis-angel的差异?

转载 作者:太空宇宙 更新时间:2023-11-03 21:43:05 24 4
gpt4 key购买 nike

我是 opencv 和 Aruco 的新手。我试图找出两种不同 Aruco 标记的轴角差异。例如,现实世界中标记的两个 (1, 0, 0) 向量的角度差 b/w。在我的理解中,变换按以下顺序发生:局部坐标-> 相机坐标-> 世界坐标。然后我得到两个 aruco 标记的角度差,因为它们现在都在同一个世界坐标中。有人可以解释这个过程是如何完成的吗?或者有没有更好的方法来找出角度差异?我正在用 python 和 opencv 编码

已知:

  1. 来自 aruco 模块中的 estimatePoseSingleMarkers() 函数的平移和旋转向量 (1x3)。 (可以使用 Rodrigues() 将旋转和平移向量转换为矩阵 (3x3))
  2. 来自相机校准的相机矩阵 (3x3) 和 dist_coefs 矩阵 (1x5)。
  3. 使用 6x6_250 aruco 标记

更新:

  1. 世界坐标=相机坐标
  2. 以下是绘制aruco 的XYZ 组件的函数。看起来原点或相机是 (0, 0, 0)。将 aruco 标记的平移和旋转矩阵应用于原点的 x、y、z 分量,得到 aruco 标记的 x、y、z 分量。对吗?

/** */

void drawAxis(InputOutputArray _image, InputArray _cameraMatrix, InputArray _distCoeffs,
InputArray _rvec, InputArray _tvec, float length) {

CV_Assert(_image.getMat().total() != 0 &&
(_image.getMat().channels() == 1 || _image.getMat().channels() == 3));
CV_Assert(length > 0);

// project axis points
vector< Point3f > axisPoints;
axisPoints.push_back(Point3f(0, 0, 0));
axisPoints.push_back(Point3f(length, 0, 0));
axisPoints.push_back(Point3f(0, length, 0));
axisPoints.push_back(Point3f(0, 0, length));
vector< Point2f > imagePoints;
projectPoints(axisPoints, _rvec, _tvec, _cameraMatrix, _distCoeffs, imagePoints);

// draw axis lines
line(_image, imagePoints[0], imagePoints[1], Scalar(0, 0, 255), 3);
line(_image, imagePoints[0], imagePoints[2], Scalar(0, 255, 0), 3);
line(_image, imagePoints[0], imagePoints[3], Scalar(255, 0, 0), 3);

最佳答案

从技术上讲,这是解决我的问题的方法。所以我认为 ARUCO 库有一个名为 projectPoints 的函数,它将 3D objectPoints 映射到 2D imagePoints。

imagePoints[0] 和 imagePoints[1] 为您提供 (length, 0, 0) 的二维投影。通过使用 arccos(np.dot(v1,v2)),您可以得到两个标记的 x 轴角度的差异。

关于python-2.7 - 如何获得世界坐标中Aruco Markers的axis-angel的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43313044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com