我有一个带有6个aruco标记的立方体,并试图在世界坐标中找到立方体的中心。基本上需要将aruco标记中心的已知点向下移动垂直于标记面的立方体长度的一半。
在汽车游戏中,这类似于根据速度和方向找到下一个位置。
我不确定如何在rvec的相反方向上转换给定距离的点。我在世界坐标系中处于3D位置,所以这个没有多大帮助。
这是我到目前为止基于projectPoints() implementation
的内容 Matx33d R;
Rodrigues(rvecs[i], R);
Affine3d aff(rvecs[i], tvecs[i]);
Vec3d move_along_z(0, 0, 0.5f);
Vec3d new_point = aff*move_along_z; // ??
答案 0 :(得分:0)
此答案主要基于this post。
double half_side = 0.05;
cv::Mat rot_mat;
Rodrigues(rvecs[i], rot_mat);
// transpose of rot_mat for easy columns extraction
Mat rot_mat_t = rot_mat.t();
// transform along z axis
double * rz = rot_mat_t.ptr<double>(2); // x=0, y=1, z=2
tvecs[i][0] += rz[0]*half_side;
tvecs[i][1] += rz[1]*half_side;
tvecs[i][2] += rz[2]*half_side;
aruco::drawAxis(imageCopy, camMatrix, distCoeffs, rvecs[i], tvecs[i],
markerLength * 0.5f);
上述代码将使aruco轴在标记上方浮动,方法是将其转换为z轴的半边距离。