IDS peak ICV v1.0.0
Loading...
Searching...
No Matches
peak_icv_calibration_view.hpp
Go to the documentation of this file.
1
11#pragma once
12
21#include <peak_icv_c/algorithms/calibration/peak_icv_calibration_view.h>
22
23namespace peak
24{
25namespace icv
26{
27namespace experimental
28{
35 : private detail::IBackendAccessible<CalibrationView>
36 , private detail::IBackendExchangeable<CalibrationView>
37{
38public:
44 ~CalibrationView() override;
45
51 CalibrationView(const CalibrationView& other);
52
58 CalibrationView(CalibrationView&& other) noexcept;
59
66
72 CalibrationView& operator=(CalibrationView&& other) noexcept;
73
87 PEAK_ICV_NO_DISCARD std::vector<ReprojectionError> GetReprojectionErrors() const;
88
99 PEAK_ICV_NO_DISCARD ExtrinsicParameters GetExtrinsicParameters() const;
100
108 PEAK_ICV_NO_DISCARD PolygonF GetConvexHull() const;
109
120 PEAK_ICV_NO_DISCARD CoordinateSystem GetCoordinateSystem() const;
121
122
123private:
124 friend peak::common::detail::BackendAccessor<CalibrationView>;
125
127 explicit CalibrationView(peak_icv_calibration_view_handle calibrationViewHandle);
128 PEAK_ICV_NO_DISCARD detail::handle_of_t<CalibrationView> GetHandle() const override;
129 PEAK_ICV_NO_DISCARD detail::handle_of_t<CalibrationView>* GetHandleAddress() override;
130
131 peak_icv_calibration_view_handle m_calibrationViewHandle{};
132};
133
134inline CalibrationView::CalibrationView()
135{
137 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_View_Create(&m_calibrationViewHandle);
138 });
139}
140
141inline CalibrationView::CalibrationView(peak_icv_calibration_view_handle calibrationViewHandle)
142 : m_calibrationViewHandle(calibrationViewHandle)
143{}
144
146{
147 if (m_calibrationViewHandle != nullptr)
148 {
149 PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_View_Destroy(m_calibrationViewHandle);
150 }
151}
152
153inline CalibrationView::CalibrationView(const CalibrationView& other)
154{
156 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_View_IncreaseUseCount(other.m_calibrationViewHandle);
157 });
158 m_calibrationViewHandle = other.m_calibrationViewHandle;
159}
160
161inline CalibrationView::CalibrationView(CalibrationView&& other) noexcept
162 : m_calibrationViewHandle(other.m_calibrationViewHandle)
163{
164 other.m_calibrationViewHandle = nullptr;
165}
166
168{
169 if (this == &other)
170 {
171 return *this;
172 }
173
174 if (m_calibrationViewHandle != nullptr)
175 {
177 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_View_Destroy(m_calibrationViewHandle);
178 });
179 }
180
182 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_View_IncreaseUseCount(other.m_calibrationViewHandle);
183 });
184 m_calibrationViewHandle = other.m_calibrationViewHandle;
185 return *this;
186}
187
189{
190 if (this == &other)
191 {
192 return *this;
193 }
194
195 if (m_calibrationViewHandle != nullptr)
196 {
198 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_View_Destroy(m_calibrationViewHandle);
199 });
200 }
201
202 m_calibrationViewHandle = other.m_calibrationViewHandle;
203 other.m_calibrationViewHandle = nullptr;
204 return *this;
205}
206
207inline detail::handle_of_t<CalibrationView> CalibrationView::GetHandle() const
208{
209 return m_calibrationViewHandle;
210}
211
212inline detail::handle_of_t<CalibrationView>* CalibrationView::GetHandleAddress()
213{
214 return &m_calibrationViewHandle;
215}
216
217inline std::vector<ReprojectionError> CalibrationView::GetReprojectionErrors() const
218{
219 size_t reprojectionErrorsCount{};
221 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_View_GetReprojectionErrors_GetCount(
222 m_calibrationViewHandle, &reprojectionErrorsCount);
223 });
224
225 std::vector<peak_icv_reprojection_error> cReprojectionErrors(reprojectionErrorsCount);
226
228 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_View_GetReprojectionErrors(
229 m_calibrationViewHandle, cReprojectionErrors.data(), reprojectionErrorsCount);
230 });
231
232 std::vector<ReprojectionError> reprojectionErrors;
233 reprojectionErrors.reserve(reprojectionErrorsCount);
234
235 std::transform(cReprojectionErrors.begin(), cReprojectionErrors.end(), std::back_inserter(reprojectionErrors),
236 [&](const auto& reprojectionError) -> ReprojectionError {
237 return reprojectionError;
238 });
239
240 return reprojectionErrors;
241}
242
244{
245 peak_icv_extrinsic_parameters extrinsicParameters{};
247 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_View_GetExtrinsicParameters(
248 m_calibrationViewHandle, &extrinsicParameters, sizeof(extrinsicParameters));
249 });
250 return peak::common::detail::BackendAccessor<ExtrinsicParameters>::CreateInstance(extrinsicParameters);
251}
252
254{
255 PolygonF polygonF{};
256 auto* polygonHandle = peak::common::detail::BackendAccessor<PolygonF>::BackendHandle(polygonF);
257
259 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_View_GetConvexHull(m_calibrationViewHandle, &polygonHandle);
260 });
261
262 return peak::common::detail::BackendAccessor<PolygonF>::CreateInstance(polygonHandle);
263}
264
266{
267 peak_icv_coordinate_system coordinateSystem{};
269 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_View_GetCoordinateSystem(m_calibrationViewHandle, &coordinateSystem);
270 });
271
272 return peak::common::detail::BackendAccessor<CoordinateSystem>::CreateInstance(coordinateSystem);
273}
274
275} /* namespace experimental */
276} /* namespace icv */
277} /* namespace peak */
A polygon is a two-dimensional geometric shape that is made up of a finite number of straight line se...
Class for holding the extrinsic result for one image of camera calibration and also the reprojection ...
std::vector< ReprojectionError > GetReprojectionErrors() const
Provides the reprojection errors for every marker in the view.
CoordinateSystem GetCoordinateSystem() const
Provides the coordinate system of the calibration view that was projected into the image plane....
ExtrinsicParameters GetExtrinsicParameters() const
Provides the extrinsic parameters for the view.
PolygonF GetConvexHull() const
Provides the convex hull of the found calibration pattern in the view.
CalibrationView & operator=(const CalibrationView &other)
Represents the coordinate system of a calibration view projected into the image plane....
This class stores and provides access to the extrinsic parameters, which include the translation,...
Class to represent the reprojection error in a calibration view.
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
peak::common::detail::c_type_of_t< Type > * handle_of_t