IDS peak ICV v1.0.0
Loading...
Searching...
No Matches
peak_icv_calibration_result.hpp
Go to the documentation of this file.
1
11#pragma once
12
20#include <peak_icv_c/algorithms/calibration/peak_icv_camera_calibration.h>
21
22namespace peak
23{
24namespace icv
25{
26namespace experimental
27{
38 : private detail::IBackendAccessible<CalibrationResult>
39 , private detail::IBackendExchangeable<CalibrationResult>
40{
41public:
53 explicit CalibrationResult(const std::string& filePath);
54
60 ~CalibrationResult() override;
61
68
74 CalibrationResult(CalibrationResult&& other) noexcept;
75
82
89
98 PEAK_ICV_NO_DISCARD double GetMeanReprojectionError() const;
99
108 PEAK_ICV_NO_DISCARD std::vector<CalibrationView> GetViews() const;
109
125 PEAK_ICV_NO_DISCARD CalibrationParameters GetCalibrationParameters() const;
126
140 operator CalibrationParameters() const; // NOLINT
141
142private:
143 friend peak::common::detail::BackendAccessor<CalibrationResult>;
144
146 explicit CalibrationResult(peak_icv_calibration_result_handle calibrationResultHandle);
147 PEAK_ICV_NO_DISCARD detail::handle_of_t<CalibrationResult> GetHandle() const override;
148 PEAK_ICV_NO_DISCARD detail::handle_of_t<CalibrationResult>* GetHandleAddress() override;
149
150 peak_icv_calibration_result_handle m_calibrationResultHandle{};
151};
152
153inline CalibrationResult::CalibrationResult()
154{
156 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_Result_Create(&m_calibrationResultHandle);
157 });
158}
159
160inline detail::handle_of_t<CalibrationResult> CalibrationResult::GetHandle() const
161{
162 return m_calibrationResultHandle;
163}
164
165inline detail::handle_of_t<CalibrationResult>* CalibrationResult::GetHandleAddress()
166{
167 return &m_calibrationResultHandle;
168}
169
170inline CalibrationResult::CalibrationResult(peak_icv_calibration_result_handle calibrationResultHandle)
171 : m_calibrationResultHandle{ calibrationResultHandle }
172{}
173
174inline CalibrationResult::CalibrationResult(const CalibrationResult& other)
175{
177 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_Result_IncreaseUseCount(other.m_calibrationResultHandle);
178 });
179 m_calibrationResultHandle = other.m_calibrationResultHandle;
180}
181
182inline CalibrationResult::CalibrationResult(CalibrationResult&& other) noexcept
183{
184 m_calibrationResultHandle = other.m_calibrationResultHandle;
185 other.m_calibrationResultHandle = nullptr;
186}
187
189{
190 if (m_calibrationResultHandle != other.m_calibrationResultHandle)
191 {
192 if (m_calibrationResultHandle != nullptr)
193 {
195 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_Result_Destroy(m_calibrationResultHandle);
196 });
197 }
198
200 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_Result_IncreaseUseCount(other.m_calibrationResultHandle);
201 });
202 m_calibrationResultHandle = other.m_calibrationResultHandle;
203 }
204
205 return *this;
206}
207
209{
210 if (m_calibrationResultHandle != other.m_calibrationResultHandle)
211 {
212 if (m_calibrationResultHandle != nullptr)
213 {
215 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_Result_Destroy(m_calibrationResultHandle);
216 });
217 }
218
219 m_calibrationResultHandle = other.m_calibrationResultHandle;
220 other.m_calibrationResultHandle = nullptr;
221 }
222
223 return *this;
224}
225
227{
228 if (m_calibrationResultHandle != nullptr)
229 {
230 PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_Result_Destroy(m_calibrationResultHandle);
231 }
232}
233
234inline CalibrationResult::CalibrationResult(const std::string& filePath)
235{
237 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_Result_CreateFromFile(&m_calibrationResultHandle, filePath.c_str());
238 });
239}
240
242{
243 double meanReprojectionError{};
244
246 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_Result_GetMeanReprojectionError(
247 m_calibrationResultHandle, &meanReprojectionError);
248 });
249 return meanReprojectionError;
250}
251
252inline std::vector<CalibrationView> CalibrationResult::GetViews() const
253{
254 size_t numViews{};
256 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_Result_GetCalibrationViews_GetCount(m_calibrationResultHandle, &numViews);
257 });
258
259 std::vector<peak_icv_calibration_view_handle> viewHandles(numViews);
261 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_View_Array_Create(viewHandles.data(), viewHandles.size());
262 });
263
265 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_Result_GetCalibrationViews(
266 m_calibrationResultHandle, viewHandles.data(), viewHandles.size());
267 });
268
269 return peak::common::detail::BackendAccessor<CalibrationView>::CreateInstances(viewHandles);
270}
271
273{
274 peak_icv_calibration_parameters calibrationParameters{};
275
277 return PEAK_ICV_C_ABI_PREFIX peak_icv_Calibration_Result_ToParameters(m_calibrationResultHandle, &calibrationParameters);
278 });
279
280 return CalibrationParameters{ calibrationParameters };
281}
282
283inline CalibrationResult::operator CalibrationParameters() const
284{
285 return GetCalibrationParameters();
286}
287
288} /* namespace experimental */
289} /* namespace icv */
290} /* namespace peak */
Holds a complete set of camera calibration parameters, including both intrinsic and extrinsic data.
Class for holding the results of a camera calibration.
double GetMeanReprojectionError() const
Retrieves the mean reprojection error from calibration result.
CalibrationResult & operator=(const CalibrationResult &other)
std::vector< CalibrationView > GetViews() const
Provides a vector of CalibrationView.
CalibrationParameters GetCalibrationParameters() const
Extract the calibration parameters from a calibration result. The calibration parameters contain only...
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
peak::common::detail::c_type_of_t< Type > * handle_of_t