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/opencv.hpp>
00033 #include <aruco/exports.h>
00034 #include <aruco/cameraparameters.h>
00035 using namespace std;
00036 namespace aruco {
00041 class ARUCO_EXPORTS Marker: public std::vector<cv::Point2f>
00042 {
00043 public:
00044
00045 int id;
00046
00047 float ssize;
00048
00049 cv::Mat Rvec,Tvec;
00050
00053 Marker();
00056 Marker(const Marker &M);
00059 Marker(const std::vector<cv::Point2f> &corners,int _id=-1);
00062 ~Marker() {}
00065 bool isValid()const{return id!=-1 && size()==4;}
00066
00069 void draw(cv::Mat &in, cv::Scalar color, int lineWidth=1,bool writeId=true)const;
00070
00076 void calculateExtrinsics(float markerSize, const CameraParameters &CP, bool setYPerpendicular=true)throw(cv::Exception);
00083 void calculateExtrinsics(float markerSize, cv::Mat CameraMatrix, cv::Mat Distorsion=cv::Mat(), bool setYPerpendicular=true)throw(cv::Exception);
00084
00088 void glGetModelViewMatrix( double modelview_matrix[16])throw(cv::Exception);
00089
00100 void OgreGetPoseParameters( double position[3], double orientation[4] )throw(cv::Exception);
00101
00104 cv::Point2f getCenter()const;
00107 float getPerimeter()const;
00110 float getArea()const;
00115 friend bool operator<(const Marker &M1,const Marker&M2)
00116 {
00117 return M1.id<M2.id;
00118 }
00121 friend ostream & operator<<(ostream &str,const Marker &M)
00122 {
00123 str<<M.id<<"=";
00124 for (int i=0;i<4;i++)
00125 str<<"("<<M[i].x<< ","<<M[i].y<<") ";
00126 str<<"Txyz=";
00127 for (int i=0;i<3;i++)
00128 str<<M.Tvec.ptr<float>(0)[i]<<" ";
00129 str<<"Rxyz=";
00130 for (int i=0;i<3;i++)
00131 str<<M.Rvec.ptr<float>(0)[i]<<" ";
00132
00133 return str;
00134 }
00135
00136
00137 private:
00138 void rotateXAxis(cv::Mat &rotation);
00139
00140 };
00141
00142 }
00143 #endif