I have an odd problem with the ArUco marker detection. for some reason the x and y axisez in the tvec dont match.
the error only increses the furthur i get from the upper left corner of the screan and the furthur i am from the camera. the axis seem to becorrect when i draw the axis.
im not sure what is the problem and i hope one of you can assist me, im new to both opencv and opengl.
drawing the axis:
drawing a cube:
code:
`std::vector<cv::vec3d> rvec; std::vector<cv::vec3d> tvec;
cv::aruco::estimatePoseSingleMarkers(poi, 0.1f, this->_cam->cameraM, this->_cam->dco, rvec, tvec);
cv::Rodrigues(rvec[0], rot_mat);
trans = {
rot_mat.at<double>(0,0),
-rot_mat.at<double>(1,0),
-rot_mat.at<double>(2,0),
0.0,
rot_mat.at<double>(0,1),
-rot_mat.at<double>(1,1),
-rot_mat.at<double>(2,1),
0.0,
rot_mat.at<double>(0,2),
-rot_mat.at<double>(1,2),
-rot_mat.at<double>(2,2),
0.0,
tvec[0][0],
-tvec[0][1],
-tvec[0][2],
1.0
};
finding the marker corners:
std::vector<std::vector<cv::Point2f> > corners;
cv::aruco::detectMarkers(pic, this->dictionary, corners, ids);
for (int i = 0; i < ids.size(); i++)
{
ans[ids[i]] = Marker(corners[i]);
}
calculating the perspective projection:
this->projection_perspective = { fx / cx, 0, 0, 0,
0, fy / cy, 0, 0,
0, 0, -(Ifar + Inear) / (Ifar - Inear), -(2 * Ifar*Inear) / (Ifar - Inear),
0, 0, -1, 0 };
this->projection_perspective = glm::transpose(projection_perspective);
camera matrix: 488.1376376745014f, 0, 253.0715989656472f, 0, 498.9594153933512f, 140.5037242647958f, 0, 0, 1
distance co: -0.1222389325494649, 0.2889414791568923, -0.04209010131697889, -0.01354673693111083, -0.2503457825759766