Program Listing for File TagDetection.h

Return to documentation for file (include/apriltag_mit/AprilTags/TagDetection.h)

#ifndef APRILTAGS_TAGDETECTION_H_
#define APRILTAGS_TAGDETECTION_H_

#include <vector>
#include <opencv2/core/core.hpp>

#include "apriltag_mit/AprilTags/TagCodes.h"

namespace AprilTags {

using Pointf = std::pair<float, float>;

struct TagDetection {
  TagDetection() = default;
  TagDetection(unsigned id, bool good, code_t obs_code, code_t code,
               unsigned hamming_distance, unsigned num_rotations)
      : id(id),
        good(good),
        obs_code(obs_code),
        code(code),
        hamming_distance(hamming_distance),
        num_rot(num_rotations) {
    p.resize(4);
  }

  unsigned id;
  bool good = false;

  code_t obs_code;

  code_t code;

  unsigned hamming_distance;

  unsigned num_rot;


  cv::Point2f cxy;

  std::vector<cv::Point2f> p;

  float obs_perimeter;

  cv::Matx33f H;

  cv::Point2f Project(const cv::Point2f& p) const;

  void RotatePoints(const std::vector<cv::Point2f>& quad_p);

  bool OverlapsTooMuch(const TagDetection& other) const;

  void ScaleTag(float scale);
};

float TagPerimeter(const std::vector<cv::Point2f>& p);
float TagRadius(const std::vector<cv::Point2f>& p);

cv::Matx33f CalcHomography(const std::vector<cv::Point2f>& p);

}  // namespace AprilTags

#endif  // APRILTAGS_TAGDETECTION_H_