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 { 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