微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Aruco 标记:在姿势估计后获取方向和位置

如何解决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 举报,一经查实,本站将立刻删除。