cvdrawingutils.cpp
Go to the documentation of this file.
1 
16 #include <opencv2/calib3d/calib3d.hpp>
17 #include <opencv2/imgproc/imgproc.hpp>
18 #include "cvdrawingutils.h"
19 #include "cameraparameters.h"
20 using namespace cv;
21 namespace aruco
22 {
23 void CvDrawingUtils::draw3dAxis(cv::Mat& Image, const CameraParameters& CP,
24  const cv::Mat& Rvec, const cv::Mat& Tvec, float axis_size)
25 {
26  Mat objectPoints(4, 3, CV_32FC1);
27  objectPoints.at<float>(0, 0) = 0;
28  objectPoints.at<float>(0, 1) = 0;
29  objectPoints.at<float>(0, 2) = 0;
30  objectPoints.at<float>(1, 0) = axis_size;
31  objectPoints.at<float>(1, 1) = 0;
32  objectPoints.at<float>(1, 2) = 0;
33  objectPoints.at<float>(2, 0) = 0;
34  objectPoints.at<float>(2, 1) = axis_size;
35  objectPoints.at<float>(2, 2) = 0;
36  objectPoints.at<float>(3, 0) = 0;
37  objectPoints.at<float>(3, 1) = 0;
38  objectPoints.at<float>(3, 2) = axis_size;
39 
40  std::vector<Point2f> imagePoints;
41  cv::projectPoints(objectPoints, Rvec, Tvec, CP.CameraMatrix, CP.Distorsion, imagePoints);
42  // draw lines of different colours
43  cv::line(Image, imagePoints[0], imagePoints[1], Scalar(0, 0, 255, 255), 1);
44  cv::line(Image, imagePoints[0], imagePoints[2], Scalar(0, 255, 0, 255), 1);
45  cv::line(Image, imagePoints[0], imagePoints[3], Scalar(255, 0, 0, 255), 1);
46  putText(Image, "x", imagePoints[1], FONT_HERSHEY_SIMPLEX, 0.6, Scalar(0, 0, 255, 255), 2);
47  putText(Image, "y", imagePoints[2], FONT_HERSHEY_SIMPLEX, 0.6, Scalar(0, 255, 0, 255), 2);
48  putText(Image, "z", imagePoints[3], FONT_HERSHEY_SIMPLEX, 0.6, Scalar(255, 0, 0, 255), 2);
49 }
50 /****
51  *
52  *
53  *
54  ****/
55 void CvDrawingUtils::draw3dAxis(cv::Mat& Image, Marker& m, const CameraParameters& CP, int lineSize)
56 {
57  float size = m.ssize * 0.6;
58  Mat objectPoints(4, 3, CV_32FC1);
59  objectPoints.at<float>(0, 0) = 0;
60  objectPoints.at<float>(0, 1) = 0;
61  objectPoints.at<float>(0, 2) = 0;
62  objectPoints.at<float>(1, 0) = size;
63  objectPoints.at<float>(1, 1) = 0;
64  objectPoints.at<float>(1, 2) = 0;
65  objectPoints.at<float>(2, 0) = 0;
66  objectPoints.at<float>(2, 1) = size;
67  objectPoints.at<float>(2, 2) = 0;
68  objectPoints.at<float>(3, 0) = 0;
69  objectPoints.at<float>(3, 1) = 0;
70  objectPoints.at<float>(3, 2) = size;
71 
72  std::vector<Point2f> imagePoints;
73  cv::projectPoints(objectPoints, m.Rvec, m.Tvec, CP.CameraMatrix, CP.Distorsion, imagePoints);
74  // draw lines of different colours
75  cv::line(Image, imagePoints[0], imagePoints[1], Scalar(0, 0, 255, 255), lineSize);
76  cv::line(Image, imagePoints[0], imagePoints[2], Scalar(0, 255, 0, 255), lineSize);
77  cv::line(Image, imagePoints[0], imagePoints[3], Scalar(255, 0, 0, 255), lineSize);
78  putText(Image, "x", imagePoints[1], FONT_HERSHEY_SIMPLEX, 0.6, Scalar(0, 0, 255, 255), 2);
79  putText(Image, "y", imagePoints[2], FONT_HERSHEY_SIMPLEX, 0.6, Scalar(0, 255, 0, 255), 2);
80  putText(Image, "z", imagePoints[3], FONT_HERSHEY_SIMPLEX, 0.6, Scalar(255, 0, 0, 255), 2);
81 }
82 
83 /****
84  *
85  *
86  *
87  ****/
88 void CvDrawingUtils::draw3dCube(cv::Mat& Image, Marker& m, const CameraParameters& CP,
89  int lineSize, bool setYperpendicular)
90 {
91  Mat objectPoints(8, 3, CV_32FC1);
92  float halfSize = m.ssize / 2.f;
93 
94  if (setYperpendicular)
95  {
96  objectPoints.at<float>(0, 0) = -halfSize;
97  objectPoints.at<float>(0, 1) = 0;
98  objectPoints.at<float>(0, 2) = -halfSize;
99  objectPoints.at<float>(1, 0) = halfSize;
100  objectPoints.at<float>(1, 1) = 0;
101  objectPoints.at<float>(1, 2) = -halfSize;
102  objectPoints.at<float>(2, 0) = halfSize;
103  objectPoints.at<float>(2, 1) = 0;
104  objectPoints.at<float>(2, 2) = halfSize;
105  objectPoints.at<float>(3, 0) = -halfSize;
106  objectPoints.at<float>(3, 1) = 0;
107  objectPoints.at<float>(3, 2) = halfSize;
108 
109  objectPoints.at<float>(4, 0) = -halfSize;
110  objectPoints.at<float>(4, 1) = m.ssize;
111  objectPoints.at<float>(4, 2) = -halfSize;
112  objectPoints.at<float>(5, 0) = halfSize;
113  objectPoints.at<float>(5, 1) = m.ssize;
114  objectPoints.at<float>(5, 2) = -halfSize;
115  objectPoints.at<float>(6, 0) = halfSize;
116  objectPoints.at<float>(6, 1) = m.ssize;
117  objectPoints.at<float>(6, 2) = halfSize;
118  objectPoints.at<float>(7, 0) = -halfSize;
119  objectPoints.at<float>(7, 1) = m.ssize;
120  objectPoints.at<float>(7, 2) = halfSize;
121  }
122  else
123  {
124  objectPoints.at<float>(0, 0) = -halfSize;
125  objectPoints.at<float>(0, 1) = -halfSize;
126  objectPoints.at<float>(0, 2) = 0;
127  objectPoints.at<float>(1, 0) = halfSize;
128  objectPoints.at<float>(1, 1) = -halfSize;
129  objectPoints.at<float>(1, 2) = 0;
130  objectPoints.at<float>(2, 0) = halfSize;
131  objectPoints.at<float>(2, 1) = halfSize;
132  objectPoints.at<float>(2, 2) = 0;
133  objectPoints.at<float>(3, 0) = -halfSize;
134  objectPoints.at<float>(3, 1) = halfSize;
135  objectPoints.at<float>(3, 2) = 0;
136 
137  objectPoints.at<float>(4, 0) = -halfSize;
138  objectPoints.at<float>(4, 1) = -halfSize;
139  objectPoints.at<float>(4, 2) = m.ssize;
140  objectPoints.at<float>(5, 0) = halfSize;
141  objectPoints.at<float>(5, 1) = -halfSize;
142  objectPoints.at<float>(5, 2) = m.ssize;
143  objectPoints.at<float>(6, 0) = halfSize;
144  objectPoints.at<float>(6, 1) = halfSize;
145  objectPoints.at<float>(6, 2) = m.ssize;
146  objectPoints.at<float>(7, 0) = -halfSize;
147  objectPoints.at<float>(7, 1) = halfSize;
148  objectPoints.at<float>(7, 2) = m.ssize;
149  }
150 
151  std::vector<Point2f> imagePoints;
152  projectPoints(objectPoints, m.Rvec, m.Tvec, CP.CameraMatrix, CP.Distorsion, imagePoints);
153  // draw lines of different colours
154  for (int i = 0; i < 4; i++)
155  cv::line(Image, imagePoints[i], imagePoints[(i + 1) % 4], Scalar(0, 0, 255, 255), lineSize);
156 
157  for (int i = 0; i < 4; i++)
158  cv::line(Image, imagePoints[i + 4], imagePoints[4 + (i + 1) % 4],
159  Scalar(0, 0, 255, 255), lineSize);
160 
161  for (int i = 0; i < 4; i++)
162  cv::line(Image, imagePoints[i], imagePoints[i + 4], Scalar(0, 0, 255, 255), lineSize);
163 }
164 } // namespace aruco
aruco::CameraParameters
Parameters of the camera.
Definition: cameraparameters.h:29
aruco::Marker::Rvec
cv::Mat Rvec
Definition: marker.h:43
cvdrawingutils.h
aruco::CameraParameters::CameraMatrix
cv::Mat CameraMatrix
Definition: cameraparameters.h:33
aruco::Marker
Definition: marker.h:35
aruco
Definition: cameraparameters.h:24
cameraparameters.h
aruco::CameraParameters::Distorsion
cv::Mat Distorsion
Definition: cameraparameters.h:35
aruco::Marker::Tvec
cv::Mat Tvec
Definition: marker.h:43
aruco::Marker::ssize
float ssize
Definition: marker.h:41


aruco
Author(s): Rafael Muñoz Salinas , Bence Magyar
autogenerated on Sat Sep 23 2023 02:26:45