17 #ifndef _Aruco_Marker_H
18 #define _Aruco_Marker_H
22 #include <opencv2/core/core.hpp>
34 class CameraParameters;
60 Marker(
const std::vector<cv::Point2f>& corners,
int _id = -1);
70 return id != -1 && size() == 4;
75 return !Rvec.empty() && !Tvec.empty();
79 void draw(cv::Mat& in, cv::Scalar color = cv::Scalar(0, 0, 255),
int lineWidth = -1,
80 bool writeId =
true,
bool writeInfo =
false)
const;
89 bool setYPerpendicular =
true);
99 void calculateExtrinsics(
float markerSize, cv::Mat CameraMatrix,
100 cv::Mat Distorsion = cv::Mat(), cv::Mat Extrinsics = cv::Mat(),
101 bool setYPerpendicular =
true,
bool correctFisheye =
false);
106 void glGetModelViewMatrix(
double modelview_matrix[16]);
118 void OgreGetPoseParameters(
double position[3],
double orientation[4]);
122 cv::Point2f getCenter()
const;
125 float getPerimeter()
const;
128 float getArea()
const;
131 float getRadius()
const;
139 void copyTo(
Marker& m)
const;
148 return M1.
id < M2.
id;
155 for (
int i = 0; i < 4; i++)
156 str <<
"(" << M[i].x <<
"," << M[i].y <<
") ";
157 if (!M.
Tvec.empty() && !M.
Rvec.empty())
160 for (
int i = 0; i < 3; i++)
161 str << M.
Tvec.ptr<
float>(0)[i] <<
" ";
163 for (
int i = 0; i < 3; i++)
164 str << M.
Rvec.ptr<
float>(0)[i] <<
" ";
171 void toStream(std::ostream& str)
const;
173 void fromStream(std::istream& str);
176 static vector<cv::Point3f> get3DPoints(
float msize);
180 return get3DPoints(ssize);
185 cv::Mat getTransformMatrix()
const;
188 void rotateXAxis(cv::Mat& rotation);