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));

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值