15 #ifndef NAV2_COSTMAP_2D__DENOISE__IMAGE_HPP_
16 #define NAV2_COSTMAP_2D__DENOISE__IMAGE_HPP_
61 size_t rows()
const {
return rows_;}
67 bool empty()
const {
return rows_ == 0 || columns_ == 0;}
70 size_t step()
const {
return step_;}
79 const T *
row(
size_t row)
const;
88 template<
class Functor>
98 template<
class Functor>
99 void forEach(Functor && fn)
const;
117 template<
class TargetElement,
class Converter>
129 : rows_{rows}, columns_{columns}, step_{step}
136 : data_start_{other.data_start_},
137 rows_{other.rows_}, columns_{other.columns_}, step_{other.step_} {}
141 : data_start_{other.data_start_},
142 rows_{other.rows_}, columns_{other.columns_}, step_{other.step_} {}
147 return const_cast<T *
>(
static_cast<const Image<T> &
>(*this).
row(row) );
153 return data_start_ + row * step_;
157 template<
class Functor>
161 [&](
const T & pixel) {
162 fn(
const_cast<T &
>(pixel));
167 template<
class Functor>
170 const T * rowPtr = row(0);
172 for (
size_t row = 0; row < rows(); ++row) {
173 const T * rowEnd = rowPtr + columns();
175 for (
const T * pixel = rowPtr; pixel != rowEnd; ++pixel) {
183 template<
class TargetElement,
class Converter>
186 if (rows() != target.
rows() || columns() != target.
columns()) {
187 throw std::logic_error(
"Image::convert. The source and target images size are different");
189 const T * source_row = row(0);
190 TargetElement * target_row = target.
row(0);
192 for (
size_t row = 0; row < rows(); ++row) {
193 const T * rowInEnd = source_row + columns();
194 const T * src = source_row;
195 TargetElement * trg = target_row;
197 for (; src != rowInEnd; ++src, ++trg) {
198 converter(*src, *trg);
200 source_row += step();
201 target_row += target.
step();
Image with pixels of type T Сan own data, be a wrapper over some memory buffer, or refer to a fragmen...
void forEach(Functor &&fn)
Read (and modify, if need) each pixel sequentially.
void convert(Image< TargetElement > &target, Converter &&converter) const
Convert each pixel to corresponding pixel of target using a custom function.
Image()=default
Create empty image.