IDS peak ICV v1.2.0
Loading...
Searching...
No Matches
peak_icv_hdr.hpp
Go to the documentation of this file.
1
11#pragma once
12
15#include <peak_icv_c/algorithms/hdr/peak_icv_hdr.h>
16#include <utility>
17
18namespace peak
19{
20namespace icv
21{
22namespace experimental
23{
24
39enum class HDRAlgorithm
40{
49 Debevec = 0,
50};
51
79{
80public:
89 explicit HDR();
90
91 ~HDR() override;
92
103 PEAK_COMMON_NO_DISCARD HDRAlgorithm GetAlgorithm() const;
104
126 void Calibrate(const std::vector<Image>& images) const;
127
151 PEAK_COMMON_NO_DISCARD Image Process(const std::vector<Image>& image) const;
152
153private:
154 friend peak::common::detail::BackendAccessor<HDR>;
155
156 PEAK_COMMON_NO_DISCARD detail::handle_of_t<HDR> GetHandle() const override;
157
158 peak_icv_hdr_handle m_handle{};
159};
160
161inline HDR::HDR()
162{
164 return PEAK_ICV_C_ABI_PREFIX peak_icv_HDR_Create(&m_handle);
165 });
166}
167
168inline HDR::~HDR()
169{
170 if (m_handle != nullptr)
171 {
172 std::ignore = PEAK_ICV_C_ABI_PREFIX peak_icv_HDR_Destroy(m_handle);
173 }
174}
175
177{
178 peak_icv_hdr_algorithm algorithm;
179
181 return PEAK_ICV_C_ABI_PREFIX peak_icv_HDR_GetAlgorithm(m_handle, &algorithm);
182 });
183
184 return static_cast<HDRAlgorithm>(algorithm);
185}
186
187inline detail::handle_of_t<HDR> HDR::GetHandle() const
188{
189 return m_handle;
190}
191
192inline void HDR::Calibrate(const std::vector<Image>& images) const
193{
194 if (images.size() == 0)
195 {
196 throw NotPossibleException("Number of input images has to be greater than 0.");
197 }
198
199 std::vector<peak_icv_image_handle> imageHandles;
200 imageHandles.reserve(images.size());
201 std::transform(images.begin(), images.end(), std::back_inserter(imageHandles), [](const auto& image) {
202 return peak::common::detail::BackendAccessor<Image>::BackendHandle(image);
203 });
205 return PEAK_ICV_C_ABI_PREFIX peak_icv_HDR_Calibrate(m_handle, imageHandles.data(), imageHandles.size());
206 });
207}
208
209inline Image HDR::Process(const std::vector<Image>& images) const
210{
211 std::vector<peak_icv_image_handle> imageHandles;
212 std::transform(images.begin(), images.end(), std::back_inserter(imageHandles), [](const peak::icv::Image& image) {
213 return peak::common::detail::BackendAccessor<Image>::BackendHandle(image);
214 });
215 peak_common_pixel_format outputPixelFormat;
217 return PEAK_ICV_C_ABI_PREFIX peak_icv_HDR_Process_GetOutputPixelFormat(
218 m_handle, peak::common::detail::CppPixelFormatToCPixelFormat(images.at(0).GetPixelFormat()), &outputPixelFormat);
219 });
220
221 Image outputImage{ peak::common::detail::CPixelFormatToCppPixelFormat(outputPixelFormat), images.at(0).GetSize() };
222 auto* const outputImageHandle = peak::common::detail::BackendAccessor<Image>::BackendHandle(outputImage);
223
225 return PEAK_ICV_C_ABI_PREFIX peak_icv_HDR_Process(m_handle, imageHandles.data(), imageHandles.size(), outputImageHandle);
226 });
227
228 return outputImage;
229}
230
231} // namespace experimental
232} // namespace icv
233} // namespace peak
For detailed information about the use of ids_peak_icv Image refer to the Image Guide.
Thrown when an operation cannot be performed due to logical constraints.
Performs High Dynamic Range (HDR) image reconstruction.
HDR()
Constructs an HDR processing object.
HDRAlgorithm GetAlgorithm() const
Returns the HDR algorithm used by this object.
Image Process(const std::vector< Image > &image) const
Generates an HDR image from the specified input images.
void Calibrate(const std::vector< Image > &images) const
Calibrates the HDR processing using a set of input images.
HDRAlgorithm
Specifies the HDR reconstruction algorithm.
@ Debevec
Debevec HDR reconstruction algorithm.
constexpr peak_common_pixel_format CppPixelFormatToCPixelFormat(PixelFormat pixelFormat) noexcept
constexpr PixelFormat CPixelFormatToCppPixelFormat(peak_common_pixel_format pixelFormat) noexcept
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
peak::common::detail::c_type_of_t< Type > * handle_of_t