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);