• AprilTags c++识别


    使用开源库:https://github.com/PrieureDeSion/apriltags-cpp

    mTagDetector = new AprilTags::TagDetector(AprilTags::tagCodes25h7);

    string imgpath = "./1.jpg";

    Mat image = imread(imgpath);

    Mat imageGray;

    cv::cvtColor(imageimageGraycv::COLOR_BGR2GRAY);

    vector<AprilTags::TagDetectiondetections = mTagDetector->extractTags(imageGray);

    cout << detections.size() << " tags detected:" << endl;

    for (int i=0idetections.size(); i++) {

       

    }

    //计算坐标与姿态

    Eigen::Vector3d translation;

    Eigen::Matrix3d rotation;

    //fx,fy,px,py相机参数 tagSize标签码尺寸

    detection.getRelativeTranslationRotation(tagSizefxfypxpy,

                                        translationrotation);

    Eigen::Matrix3d F;

      F <<

        1, 0,  0,

        0,  -1,  0,

        0,  0,  1;

    Eigen::Matrix3d fixed = F*rotation;

    double yawpitchroll;

    toEuler(fixed , yawpitchroll);

    qDebug() << "  distance=" << translation.norm()

           << "m, x=" << translation(0)

           << ", y=" << translation(1)

           << ", z=" << translation(2)

           << ", yaw=" << yaw

           << ", pitch=" << pitch

           << ", roll=" << roll;

    //绘制结果

    void drawPred(AprilTags::TagDetectiondetectionMatframe)

    {

        Point a(detection.p[0].firstdetection.p[0].second);

        Point b(detection.p[1].firstdetection.p[1].second);

        Point c(detection.p[2].firstdetection.p[2].second);

        Point d(detection.p[3].firstdetection.p[3].second);

        cv::line(frameabScalar(02550), 2LINE_AA);

        cv::line(framebcScalar(02550), 2LINE_AA);

        cv::line(framecdScalar(02550), 2LINE_AA);

        cv::line(framedaScalar(02550), 2LINE_AA);

        string label = format("%d"detection.id);

        cv::putText(framelabelacv::FONT_HERSHEY_SIMPLEX0.75Scalar(02550), 2);

    }

    void toEuler(const Eigen::Matrix3dwdoubleyawdoublepitchdoubleroll) {

        yaw = rad(atan2(w(1,0)w(0,0)));

        double c = cos(yaw);

        double s = sin(yaw);

        pitch = rad(atan2(-w(2,0)w(0,0)*c + w(1,0)*s));

        roll  = rad(atan2(w(0,2)*s - w(1,2)*c, -w(0,1)*s + w(1,1)*c));

    }

  • 相关阅读:
    layui table表格跨页多选
    前端的强缓存和协商缓存
    1159. 市场分析 II
    js 给对象写 JSON.stringify 的方法
    安装python中tensorflow和keras==2.2.0的路程
    Nginx负载均衡之动态更新upstream
    面试又挂了:大厂面试到底更看重学历还是技术?来看看大佬的说法
    Vue2:使用Vant UI实现网易云评论页上拉和下拉刷新
    恶意代码防范技术笔记(五)
    10.22 - 每日一题 - 408
  • 原文地址:https://blog.csdn.net/shulongjiang/article/details/126617275