使用aruco中的rvec和tvec找到一个立方体的中心:: estimatePoseSingleMarkers()

时间:2018-01-08 11:02:20

标签: c++ opencv

我有一个带有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; // ??

1 个答案:

答案 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轴的半边距离。