17 #include "opencv2/calib3d/calib3d.hpp" 49 float size = std::max(1.,
float(img.cols) / 1280.);
51 m.draw(img, cv::Scalar(0, 0, 255), size,
false);
58 std::map<int, FractalMarker> id_fmarker =
61 std::vector<cv::Point2f> inners;
62 std::map<int, std::vector<cv::Point3f>> id_innerCorners =
64 for (
auto id_innerC : id_innerCorners)
66 std::vector<cv::Point3f> inner3d;
67 for (
auto pt : id_innerC.second)
68 inners.push_back(cv::Point2f(pt.x, pt.y));
71 std::vector<cv::Point2f> points3d;
72 std::vector<cv::Point2f> points2d;
75 for (
auto p : id_fmarker[m.id].points)
76 points3d.push_back(cv::Point2f(p.x, p.y));
79 points2d.push_back(p);
82 cv::Mat H = cv::findHomography(points3d, points2d);
83 std::vector<cv::Point2f> dstPnt;
84 cv::perspectiveTransform(inners, dstPnt, H);
86 float size = std::max(1.,
float(img.cols) / 1280.);
88 cv::circle(img, p, size, cv::Scalar(0, 0, 255), CV_FILLED);
99 std::vector<cv::Point3f> innerPoints3d;
102 cv::Mat_<double> src(3, 1, rot.type());
108 cam_image_point = cam_image_point / cv::norm(cam_image_point);
110 if (cam_image_point.at<
double>(2, 0) > 0.85)
111 innerPoints3d.push_back(pt);
114 if (innerPoints3d.size() > 0)
116 std::vector<cv::Point2f> innerPoints;
119 for (
auto p : innerPoints)
120 circle(img, p, 3, cv::Scalar(0, 0, 255), CV_FILLED);
140 cv::Mat objectPoints(8, 3, CV_32FC1);
143 float halfSize = msize / 2;
145 objectPoints.at<
float>(0, 0) = -halfSize;
146 objectPoints.at<
float>(0, 1) = -halfSize;
147 objectPoints.at<
float>(0, 2) = 0;
148 objectPoints.at<
float>(1, 0) = halfSize;
149 objectPoints.at<
float>(1, 1) = -halfSize;
150 objectPoints.at<
float>(1, 2) = 0;
151 objectPoints.at<
float>(2, 0) = halfSize;
152 objectPoints.at<
float>(2, 1) = halfSize;
153 objectPoints.at<
float>(2, 2) = 0;
154 objectPoints.at<
float>(3, 0) = -halfSize;
155 objectPoints.at<
float>(3, 1) = halfSize;
156 objectPoints.at<
float>(3, 2) = 0;
158 objectPoints.at<
float>(4, 0) = -halfSize;
159 objectPoints.at<
float>(4, 1) = -halfSize;
160 objectPoints.at<
float>(4, 2) = msize;
161 objectPoints.at<
float>(5, 0) = halfSize;
162 objectPoints.at<
float>(5, 1) = -halfSize;
163 objectPoints.at<
float>(5, 2) = msize;
164 objectPoints.at<
float>(6, 0) = halfSize;
165 objectPoints.at<
float>(6, 1) = halfSize;
166 objectPoints.at<
float>(6, 2) = msize;
167 objectPoints.at<
float>(7, 0) = -halfSize;
168 objectPoints.at<
float>(7, 1) = halfSize;
169 objectPoints.at<
float>(7, 2) = msize;
172 std::vector<cv::Point2f> imagePoints;
175 for (
int i = 0; i < 4; i++)
176 cv::line(Image, imagePoints[i], imagePoints[(i + 1) % 4], cv::Scalar(0, 0, 255, 255), lineSize);
178 for (
int i = 0; i < 4; i++)
179 cv::line(Image, imagePoints[i + 4], imagePoints[4 + (i + 1) % 4],
180 cv::Scalar(0, 0, 255, 255), lineSize);
182 for (
int i = 0; i < 4; i++)
183 cv::line(Image, imagePoints[i], imagePoints[i + 4], cv::Scalar(0, 0, 255, 255), lineSize);
cv::Ptr< FractalMarkerLabeler > _fractalLabeler
void setConfiguration(int configuration)
setConfiguration
cv::Ptr< MarkerDetector > _markerDetector
const cv::Mat getTvec() const
void draw2d(cv::Mat &img)
static std::string getTypeString(FractalMarkerSet::CONF_TYPES t)
void draw3dCube(cv::Mat &Image, FractalMarker m, const CameraParameters &CP, int lineSize)
static void draw3dAxis(cv::Mat &Image, const CameraParameters &CP, const cv::Mat &Rvec, const cv::Mat &Tvec, float axis_size)
std::string configuration_type
void draw3d(cv::Mat &img, bool cube=true, bool axis=true)
static cv::Ptr< FractalMarkerLabeler > create(std::string params)
float getMarkerSize() const
float getFractalSize() const
Main class for marker detection.
Parameters of the camera.
const cv::Mat getRvec() const
CameraParameters _cam_params
const std::vector< cv::Point3f > getInner3d()
std::map< int, FractalMarker > fractalMarkerCollection
void drawMarkers(cv::Mat &img)
FractalMarkerSet getFractal()
std::vector< aruco::Marker > Markers
FractalPoseTracker Tracker