如何解决Aruco 标记:在姿势估计后获取方向和位置
我想知道我的标记的真实位置和方向。 如果我理解得很好,tvecs 给了我标记的真实位置,我用尺子测量了距离,即使我有时有奇怪的值,它似乎也是正确的。
如果有人知道为什么?
不幸的是,rvecs 也给了我奇怪的价值,而且很难衡量。我将标记放在相机前,因此角度大约为 0°,因此 rvecs 需要返回 [0,0],如果我将标记在 y 方向旋转 45°,则需要 [0,45,0] 等
Rvecs 不返回标记的方向?
std::vector<int> ids;
std::vector<std::vector<cv::Point2f>> corners;
//Detection of markers
cv::aruco::detectMarkers(image,dictionary,corners,ids);
char key = (char) cv::waitKey(waitTime);
// if at least one marker detected
if (ids.size() > 0)
{
//std::cout << "FOUND " << std::endl;
cv::aruco::drawDetectedMarkers(imagecopy,ids);
std::vector<cv::Vec3d> rvecs,tvecs;
cv::aruco::estimatePoseSingleMarkers(corners,0.01,cameraMatrix,distCoeffs,rvecs,tvecs);
// draw axis for each marker
for(size_t i=0; i<ids.size(); i++)
{
cv::aruco::drawAxis(imagecopy,rvecs[i],tvecs[i],0.1);
if(key == 65)
{
std::cout << i << std::endl;
std::cout << rvecs[i] << std::endl;
std::cout << tvecs[i] << std::endl;
std::cout << tvecs[i]*rvecs[i] << std::endl;
double distance = sqrt( (tvecs[i][0] * tvecs[i][0]) + (tvecs[i][1] * tvecs[i][1]) + (tvecs[i][2] * tvecs[i][2]) );
std::cout << distance << std::endl;
std::cout << rvecs[i][0] * 100 << " /// " << rvecs[i][1] * 100 << " /// " << rvecs[i][2] << std::endl;
fileOut << rvecs[i][0] << "," << rvecs[i][1] << "," << rvecs[i][2] << std::endl;
}
}
}
这是我的代码,但我不认为我做错了什么。 也许我应该用一些东西乘以 Rvecs ?但是对于tvecs我不需要相乘,我直接得到值
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。