Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _Aruco_Marker_H
00029 #define _Aruco_Marker_H
00030 #include <vector>
00031 #include <iostream>
00032 #include <opencv2/core/core.hpp>
00033 #include "exports.h"
00034 #include "cameraparameters.h"
00035 using namespace std;
00036 namespace aruco {
00041 class ARUCO_EXPORTS Marker : public std::vector< cv::Point2f > {
00042 public:
00043
00044 int id;
00045
00046 float ssize;
00047
00048 cv::Mat Rvec, Tvec;
00049
00052 Marker();
00055 Marker(const Marker &M);
00058 Marker(const std::vector< cv::Point2f > &corners, int _id = -1);
00061 ~Marker() {}
00064 bool isValid() const { return id != -1 && size() == 4; }
00065
00068 void draw(cv::Mat &in, cv::Scalar color, int lineWidth = 1, bool writeId = true) const;
00069
00075 void calculateExtrinsics(float markerSize, const CameraParameters &CP, bool setYPerpendicular = true) throw(cv::Exception);
00082 void calculateExtrinsics(float markerSize, cv::Mat CameraMatrix, cv::Mat Distorsion = cv::Mat(), bool setYPerpendicular = true) throw(cv::Exception);
00083
00087 void glGetModelViewMatrix(double modelview_matrix[16]) throw(cv::Exception);
00088
00099 void OgreGetPoseParameters(double position[3], double orientation[4]) throw(cv::Exception);
00100
00103 cv::Point2f getCenter() const;
00106 float getPerimeter() const;
00109 float getArea() const;
00114 friend bool operator<(const Marker &M1, const Marker &M2) { return M1.id < M2.id; }
00117 friend ostream &operator<<(ostream &str, const Marker &M) {
00118 str << M.id << "=";
00119 for (int i = 0; i < 4; i++)
00120 str << "(" << M[i].x << "," << M[i].y << ") ";
00121 str << "Txyz=";
00122 for (int i = 0; i < 3; i++)
00123 str << M.Tvec.ptr< float >(0)[i] << " ";
00124 str << "Rxyz=";
00125 for (int i = 0; i < 3; i++)
00126 str << M.Rvec.ptr< float >(0)[i] << " ";
00127
00128 return str;
00129 }
00130
00131
00132 private:
00133 void rotateXAxis(cv::Mat &rotation);
00134 };
00135 }
00136 #endif