75 #ifndef SLIP_GRAYSCALEIMAGE_HPP
76 #define SLIP_GRAYSCALEIMAGE_HPP
91 #include <wand/magick_wand.h>
92 #include <magick/api.h>
101 #include <boost/serialization/access.hpp>
102 #include <boost/serialization/split_member.hpp>
103 #include <boost/serialization/version.hpp>
109 class stride_iterator;
112 class iterator2d_box;
116 class const_iterator2d_box;
119 class const_iterator2d_range;
133 template <
typename T>
136 template <
typename T>
139 template <
typename T>
140 std::ostream& operator<<(std::ostream & out, const slip::GrayscaleImage<T>& a);
151 bool operator<(const slip::GrayscaleImage<T>& x,
159 bool operator<=(const slip::GrayscaleImage<T>& x,
188 template <
typename T>
245 static const std::size_t
DIM = 2;
297 template<
typename InputIterator>
1884 friend std::ostream& operator<< <>(std::ostream & out,
const self& a);
1895 void read(
const std::string& file_path_name);
1905 void write(
const std::string& file_path_name)
const;
1914 slip::write_ascii_2d<self,value_type>(*
this,file_path_name);
1924 slip::read_ascii_2d<self>(*
this,file_path_name);
1959 std::fill_n(this->
begin(),
size(),value);
1981 template<
typename InputIterator>
2163 std::string
name()
const;
2324 template<
class Archive>
2325 void save(Archive & ar,
const unsigned int version)
const
2329 template<
class Archive>
2330 void load(Archive & ar,
const unsigned int version)
2334 BOOST_SERIALIZATION_SPLIT_MEMBER();
2370 template<
typename T>
2371 GrayscaleImage<T>
operator+(
const GrayscaleImage<T>& M1,
2372 const GrayscaleImage<T>& M2);
2380 template<
typename T>
2381 GrayscaleImage<T>
operator+(
const GrayscaleImage<T>& M1,
2390 template<
typename T>
2391 GrayscaleImage<T>
operator+(
const T& val,
2392 const GrayscaleImage<T>& M1);
2402 template<
typename T>
2403 GrayscaleImage<T>
operator-(
const GrayscaleImage<T>& M1,
2404 const GrayscaleImage<T>& M2);
2412 template<
typename T>
2413 GrayscaleImage<T>
operator-(
const GrayscaleImage<T>& M1,
2422 template<
typename T>
2423 GrayscaleImage<T>
operator-(
const T& val,
2424 const GrayscaleImage<T>& M1);
2434 template<
typename T>
2435 GrayscaleImage<T>
operator*(
const GrayscaleImage<T>& M1,
2436 const GrayscaleImage<T>& M2);
2444 template<
typename T>
2445 GrayscaleImage<T>
operator*(
const GrayscaleImage<T>& M1,
2454 template<
typename T>
2455 GrayscaleImage<T>
operator*(
const T& val,
2456 const GrayscaleImage<T>& M1);
2466 template<
typename T>
2467 GrayscaleImage<T>
operator/(
const GrayscaleImage<T>& M1,
2468 const GrayscaleImage<T>& M2);
2476 template<
typename T>
2477 GrayscaleImage<T>
operator/(
const GrayscaleImage<T>& M1,
2488 template<
typename T>
2489 T&
min(
const GrayscaleImage<T>& M1);
2497 template<
typename T>
2498 T&
max(
const GrayscaleImage<T>& M1);
2504 template<
typename T>
2507 matrix_(new slip::
Matrix<T>())
2510 template<
typename T>
2514 matrix_(new slip::
Matrix<T>(height,width))
2517 template<
typename T>
2522 matrix_(new slip::
Matrix<T>(height,width,val))
2525 template<
typename T>
2530 matrix_(new slip::
Matrix<T>(height,width,val))
2533 template<
typename T>
2536 matrix_(new slip::
Matrix<T>((*rhs.matrix_)))
2539 template<
typename T>
2546 template<
typename T>
2552 *matrix_ = *(rhs.matrix_);
2557 template<
typename T>
2561 std::fill_n(matrix_->begin(),matrix_->size(),val);
2565 template<
typename T>
2571 matrix_->resize(height,width,val);
2575 template<
typename T>
2579 return matrix_->begin();
2582 template<
typename T>
2586 return matrix_->end();
2589 template<
typename T>
2597 template<
typename T>
2606 template<
typename T>
2613 template<
typename T>
2620 template<
typename T>
2628 template<
typename T>
2630 std::reverse_iterator<const T*>
2633 return std::reverse_iterator<const T*>(begin());
2636 template<
typename T>
2641 return matrix_->row_begin(row);
2644 template<
typename T>
2646 typename GrayscaleImage<T>::row_iterator
2649 return matrix_->row_end(row);
2652 template<
typename T>
2654 typename GrayscaleImage<T>::col_iterator
2657 return matrix_->col_begin(col);
2661 template<
typename T>
2663 typename GrayscaleImage<T>::col_iterator
2666 return matrix_->col_end(col);
2670 template<
typename T>
2672 typename GrayscaleImage<T>::const_row_iterator
2676 return tp->row_begin(row);
2679 template<
typename T>
2681 typename GrayscaleImage<T>::const_row_iterator
2685 return tp->row_end(row);
2688 template<
typename T>
2690 typename GrayscaleImage<T>::const_col_iterator
2694 return tp->col_begin(col);
2697 template<
typename T>
2699 typename GrayscaleImage<T>::const_col_iterator
2703 return tp->col_end(col);
2708 template<
typename T>
2710 typename GrayscaleImage<T>::reverse_row_iterator
2713 return matrix_->row_rbegin(row);
2716 template<
typename T>
2718 typename GrayscaleImage<T>::const_reverse_row_iterator
2722 return tp->row_rbegin(row);
2725 template<
typename T>
2727 typename GrayscaleImage<T>::reverse_row_iterator
2730 return matrix_->row_rend(row);
2733 template<
typename T>
2735 typename GrayscaleImage<T>::const_reverse_row_iterator
2739 return tp->row_rend(row);
2742 template<
typename T>
2744 typename GrayscaleImage<T>::reverse_col_iterator
2747 return matrix_->col_rbegin(col);
2750 template<
typename T>
2755 return tp->col_rbegin(col);
2758 template<
typename T>
2760 typename GrayscaleImage<T>::reverse_col_iterator
2763 return matrix_->col_rend(col);
2766 template<
typename T>
2768 typename GrayscaleImage<T>::const_reverse_col_iterator
2772 return tp->col_rend(col);
2775 template<
typename T>
2777 typename GrayscaleImage<T>::row_range_iterator
2781 return matrix_->row_begin(row,range);
2784 template<
typename T>
2786 typename GrayscaleImage<T>::const_row_range_iterator
2791 return tp->row_begin(row,range);
2794 template<
typename T>
2796 typename GrayscaleImage<T>::col_range_iterator
2800 return matrix_->col_begin(col,range);
2803 template<
typename T>
2805 typename GrayscaleImage<T>::const_col_range_iterator
2810 return tp->col_begin(col,range);
2814 template<
typename T>
2816 typename GrayscaleImage<T>::row_range_iterator
2820 return matrix_->row_end(row,range);
2823 template<
typename T>
2825 typename GrayscaleImage<T>::const_row_range_iterator
2830 return tp->row_end(row,range);
2833 template<
typename T>
2835 typename GrayscaleImage<T>::col_range_iterator
2839 return matrix_->col_end(col,range);
2842 template<
typename T>
2844 typename GrayscaleImage<T>::const_col_range_iterator
2849 return tp->col_end(col,range);
2852 template<
typename T>
2854 typename GrayscaleImage<T>::reverse_row_range_iterator
2861 template<
typename T>
2863 typename GrayscaleImage<T>::const_reverse_row_range_iterator
2871 template<
typename T>
2873 typename GrayscaleImage<T>::reverse_col_range_iterator
2880 template<
typename T>
2882 typename GrayscaleImage<T>::const_reverse_col_range_iterator
2889 template<
typename T>
2891 typename GrayscaleImage<T>::reverse_row_range_iterator
2898 template<
typename T>
2900 typename GrayscaleImage<T>::const_reverse_row_range_iterator
2908 template<
typename T>
2910 typename GrayscaleImage<T>::reverse_col_range_iterator
2917 template<
typename T>
2919 typename GrayscaleImage<T>::const_reverse_col_range_iterator
2929 template<
typename T>
2933 return matrix_->upper_left();
2936 template<
typename T>
2944 template<
typename T>
2948 return matrix_->bottom_right();
2951 template<
typename T>
2959 template<
typename T>
2964 return matrix_->upper_left(box);
2968 template<
typename T>
2976 template<
typename T>
2981 return matrix_->bottom_right(box);
2984 template<
typename T>
2992 template<
typename T>
2998 return matrix_->upper_left(row_range,col_range);
3001 template<
typename T>
3011 template<
typename T>
3017 return matrix_->bottom_right(row_range,col_range);
3020 template<
typename T>
3030 template<
typename T>
3035 return matrix_->upper_left(range);
3038 template<
typename T>
3047 template<
typename T>
3052 return matrix_->bottom_right(range);
3055 template<
typename T>
3065 template<
typename T>
3070 return matrix_->rbottom_right();
3073 template<
typename T>
3082 template<
typename T>
3087 return matrix_->rupper_left();
3090 template<
typename T>
3099 template<
typename T>
3104 return matrix_->rbottom_right(box);
3107 template<
typename T>
3116 template<
typename T>
3121 return matrix_->rupper_left(box);
3124 template<
typename T>
3133 template<
typename T>
3139 return matrix_->rupper_left(row_range,col_range);
3142 template<
typename T>
3152 template<
typename T>
3158 return matrix_->rbottom_right(row_range,col_range);
3161 template<
typename T>
3171 template<
typename T>
3176 return this->rupper_left(range,range);
3179 template<
typename T>
3184 return this->rupper_left(range,range);
3187 template<
typename T>
3192 return this->rbottom_right(range,range);
3195 template<
typename T>
3200 return this->rbottom_right(range,range);
3203 template <
typename T>
3208 out<<*(a.matrix_)<<std::endl;
3216 void GrayscaleImage<unsigned char>::read(
const std::string& file_path_name)
3218 slip::read_magick_gray_char(file_path_name,*
this);
3223 void GrayscaleImage<short>::read(
const std::string& file_path_name)
3225 slip::read_magick_gray_short(file_path_name,*
this);
3230 void GrayscaleImage<int>::read(
const std::string& file_path_name)
3232 slip::read_magick_gray_int(file_path_name,*
this);
3237 void GrayscaleImage<long>::read(
const std::string& file_path_name)
3239 slip::read_magick_gray_long(file_path_name,*
this);
3244 void GrayscaleImage<float>::read(
const std::string& file_path_name)
3246 slip::read_magick_gray_float(file_path_name,*
this);
3251 void GrayscaleImage<double>::read(
const std::string& file_path_name)
3253 slip::read_magick_gray_double(file_path_name,*
this);
3262 slip::write_ascii_2d<self,int>(*
this,file_path_name);
3269 slip::write_magick_gray_char(this->begin(),
3270 this->width(),this->height(),
3276 void GrayscaleImage<short>::write(
const std::string& file_path_name)
const
3278 slip::write_magick_gray_short(this->begin(),
3279 this->width(),this->height(),
3285 void GrayscaleImage<int>::write(
const std::string& file_path_name)
const
3287 slip::write_magick_gray_int(this->begin(),
3288 this->width(),this->height(),
3294 void GrayscaleImage<long>::write(
const std::string& file_path_name)
const
3296 slip::write_magick_gray_long(this->begin(),
3297 this->width(),this->height(),
3303 void GrayscaleImage<float>::write(
const std::string& file_path_name)
const
3305 slip::write_magick_gray_float(this->begin(),
3306 this->width(),this->height(),
3312 void GrayscaleImage<double>::write(
const std::string& file_path_name)
const
3314 slip::write_magick_gray_double(this->begin(),
3315 this->width(),this->height(),
3321 template<
typename T>
3323 typename GrayscaleImage<T>::pointer
3326 return (*matrix_)[i];
3329 template<
typename T>
3331 typename GrayscaleImage<T>::const_pointer
3334 return (*matrix_)[i];
3337 template<
typename T>
3339 typename GrayscaleImage<T>::reference
3341 const typename GrayscaleImage<T>::size_type j)
3343 return (*matrix_)[i][j];
3346 template<
typename T>
3348 typename GrayscaleImage<T>::const_reference
3350 const typename GrayscaleImage<T>::size_type j)
const
3352 return (*matrix_)[i][j];
3355 template<
typename T>
3357 typename GrayscaleImage<T>::reference
3360 return (*matrix_)(point2d);
3363 template<
typename T>
3365 typename GrayscaleImage<T>::const_reference
3368 return (*matrix_)(point2d);
3372 template<
typename T>
3378 assert((*
this)[0] != 0);
3380 assert(row_range.
start() < int(this->dim2()));
3381 assert(row_range.
stop() < int(this->dim2()));
3383 assert(col_range.
start() < int(this->dim1()));
3384 assert(col_range.
stop() < int(this->dim1()));
3387 return GrayscaleImage<T>(rows+1,cols+1,matrix_->upper_left(row_range,col_range),
3388 matrix_->bottom_right(row_range,col_range));
3392 template<
typename T>
3397 template<
typename T>
3402 template<
typename T>
3407 template<
typename T>
3412 template<
typename T>
3417 template<
typename T>
3422 template<
typename T>
3427 template<
typename T>
3432 template<
typename T>
3437 template<
typename T>
3446 template<
typename T>
3450 template<
typename T>
3454 matrix_->swap(*(M.matrix_));
3457 template<
typename T>
3461 matrix_->operator+=(val);
3465 template<
typename T>
3469 matrix_->operator-=(val);
3474 template<
typename T>
3478 matrix_->operator*=(val);
3482 template<
typename T>
3486 matrix_->operator/=(val);
3490 template<
typename T>
3494 *matrix_ = matrix_->operator-();
3498 template<
typename T>
3502 matrix_->operator+=(*(rhs.matrix_));
3506 template<
typename T>
3510 matrix_->operator-=(*(rhs.matrix_));
3514 template<
typename T>
3518 matrix_->operator*=(*(rhs.matrix_));
3522 template<
typename T>
3526 matrix_->operator/=(*(rhs.matrix_));
3531 template<
typename T>
3535 return matrix_->min();
3538 template<
typename T>
3542 return matrix_->max();
3545 template<
typename T>
3549 return matrix_->sum();
3552 template<
typename T>
3556 matrix_->apply(fun);
3560 template<
typename T>
3564 matrix_->apply(fun);
3569 template<
typename T>
3577 std::transform(M1.
begin(),M1.
end(),M2.
begin(),tmp.begin(),std::plus<T>());
3581 template<
typename T>
3591 template<
typename T>
3600 template<
typename T>
3608 std::transform(M1.
begin(),M1.
end(),M2.
begin(),tmp.begin(),std::minus<T>());
3612 template<
typename T>
3622 template<
typename T>
3630 template<
typename T>
3638 std::transform(M1.
begin(),M1.
end(),M2.
begin(),tmp.begin(),std::multiplies<T>());
3642 template<
typename T>
3652 template<
typename T>
3660 template<
typename T>
3668 std::transform(M1.
begin(),M1.
end(),M2.
begin(),tmp.begin(),std::divides<T>());
3672 template<
typename T>
3691 template<
typename T>
3702 template<
typename T>
3711 template<
typename T>
3720 template<
typename T>
3731 template<
typename T>
3733 bool operator<(const GrayscaleImage<T>& x,
3736 return std::lexicographical_compare(x.begin(), x.end(),
3737 y.begin(), y.end());
3741 template<
typename T>
3750 template<
typename T>
3752 bool operator<=(const GrayscaleImage<T>& x,
3759 template<
typename T>
3770 #endif //SLIP_GRAYSCALEIMAGE_HPP
GrayscaleImage< T > & apply(T(*fun)(T))
Applys the one-parameter C-function fun to each element of the GrayscaleImage.
slip::stride_iterator< const_pointer > const_row_range_iterator
void fill(InputIterator first, InputIterator last)
Fills the container range [begin(),begin()+size()) with a copy of the range [first,last)
reverse_row_iterator row_rbegin(const size_type row)
Returns a read/write reverse iterator that points to the last element of the row row in the Grayscale...
iterator2d default_iterator
bool operator!=(const Array< T > &x, const Array< T > &y)
std::size_t iterations() const
Rerturns the number of iterations of the range.
size_type cols() const
Returns the number of columns (second dimension size) in the GrayscaleImage.
self & operator/=(const T &val)
bool empty() const
Returns true if the GrayscaleImage is empty. (Thus size() == 0)
iterator2d upper_left()
Returns a read/write iterator2d that points to the first element of the Matrix. It points to the uppe...
reference operator()(const size_type i, const size_type j)
Subscript access to the data contained in the GrayscaleImage.
col_iterator col_begin(const size_type col)
Returns a read/write iterator that points to the first element of the column column in the GrayscaleI...
size_type height() const
Returns the height (first dimension size) in the GrayscaleImage.
GrayscaleImage & operator=(const self &rhs)
Assign a GrayscaleImage.
const GrayscaleImage< T > const_self
reverse_iterator rbegin()
Returns a read/write reverse iterator that points to the last element in the GrayscaleImage. Iteration is done in reverse element order.
size_type dim2() const
Returns the number of columns (second dimension size) in the GrayscaleImage.
GrayscaleImage(const size_type height, const size_type width, InputIterator first, InputIterator last)
Contructs a GrayscaleImage from a range.
This is some iterator to iterate a 2d container into two Range defined by the indices and strides of ...
iterator2d bottom_right()
Returns a read/write iterator2d that points to the past the end element of the Matrix. It points to past the end element of the bottom right element of the Matrix.
const_pointer const_row_iterator
T & min(const GrayscaleImage< T > &M1)
Returns the min element of a GrayscaleImage.
std::reverse_iterator< iterator > reverse_iterator
friend class boost::serialization::access
iterator begin()
Returns a read/write iterator that points to the first element in the GrayscaleImage. Iteration is done in ordinary element order.
Color< T > operator+(const Color< T > &V1, const Color< T > &V2)
iterator begin()
Returns a read/write iterator that points to the first element in the Matrix. Iteration is done in or...
Provides a class to manipulate iterator2d within a slip::Box2d. It is used to iterate throw 2d contai...
void write_ascii(const std::string &file_path_name) const
Write the GrayscaleImage to an ASCII file.
slip::Matrix< T >::iterator2d_range iterator2d_range
T sum() const
Returns the sum of the elements of the GrayscaleImage.
std::reverse_iterator< const_iterator2d > const_reverse_iterator2d
~GrayscaleImage()
Destructor of the GrayscaleImage.
This is a grayscaleimage class. This is a two-dimensional dynamic and generic container. This container statisfies the BidirectionnalContainer concepts of the STL. It is also an 2d extension of the RandomAccessContainer concept. That is to say the bracket element access is replaced by the double bracket element access. Data are stored using a Matrix class. It extends the interface of Matrix adding image read/write operations. These operations are done using the ImageMagick library.
const value_type & const_reference
iterator end()
Returns a read/write iterator that points one past the last element in the GrayscaleImage. Iteration is done in ordinary element order.
slip::GrayscaleImage< short > GrayscaleImage_s
short alias
std::string name() const
Returns the name of the class.
size_type rows() const
Returns the number of rows (first dimension size) in the GrayscaleImage.
std::reverse_iterator< row_range_iterator > reverse_row_range_iterator
slip::stride_iterator< const_col_iterator > const_col_range_iterator
size_type columns() const
Returns the number of columns (second dimension size) in the GrayscaleImage.
size_type width() const
Returns the number of columns (second dimension size) in the GrayscaleImage.
slip::stride_iterator< col_iterator > col_range_iterator
slip::GrayscaleImage< long > GrayscaleImage_l
long alias
bool operator>(const Array< T > &x, const Array< T > &y)
void resize(const size_type height, const size_type width, const T &val=T())
Resizes a GrayscaleImage.
const_pointer const_iterator
This is a point2d class, a specialized version of Point<CoordType,DIM> with DIM = 2...
slip::Matrix< T >::const_iterator2d_range const_iterator2d_range
reverse_iterator rend()
Returns a read/write reverse iterator that points to one before the first element in the GrayscaleIma...
const_iterator2d const_default_iterator
slip::Matrix< T >::iterator2d iterator2d
static const std::size_t DIM
std::reverse_iterator< col_range_iterator > reverse_col_range_iterator
self & operator-=(const T &val)
This is some iterator to iterate a 2d container into a Box area defined by the indices of the 2d cont...
row_iterator row_end(const size_type row)
Returns a read/write iterator that points one past the end element of the row row in the GrayscaleIma...
slip::GrayscaleImage< unsigned long > GrayscaleImage_ul
unsigned long alias
T & min() const
Returns the min element of the GrayscaleImage according to the operator <.
slip::GrayscaleImage< unsigned short > GrayscaleImage_us
unsigned long alias
std::reverse_iterator< const_row_range_iterator > const_reverse_row_range_iterator
slip::stride_iterator< pointer > col_iterator
slip::stride_iterator< pointer > row_range_iterator
iterator2d bottom_right()
Returns a read/write iterator2d that points to the past the end element of the GrayscaleImage. It points to past the end element of the bottom right element of the GrayscaleImage.
std::reverse_iterator< iterator > reverse_row_iterator
const value_type * const_pointer
void copy(_II first, _II last, _OI output_first)
Copy algorithm optimized for slip iterators.
ptrdiff_t difference_type
bool is_valid() const
Returns true if the range is valid :
SubType start() const
Accessor of the start subscript of the Range.
std::reverse_iterator< const_iterator2d_range > const_reverse_iterator2d_range
slip::Matrix< T >::const_iterator2d const_iterator2d
size_type max_size() const
Returns the maximal size (number of elements) in the GrayscaleImage.
reverse_iterator2d rbottom_right()
Returns a read/write reverse iterator2d. It points to past the upper left element of the GrayscaleIma...
void read_ascii(const std::string &file_path_name)
Read the GrayscaleImage from an ASCII file.
size_type size() const
Returns the number of elements in the GrayscaleImage.
slip::GrayscaleImage< int > GrayscaleImage_i
int alias
This is some iterator to iterate a 2d container into a slip::Box2d area defined by the indices of the...
GrayscaleImage()
Constructs a GrayscaleImage.
self & operator*=(const T &val)
Numerical matrix class. This container statisfies the BidirectionnalContainer concepts of the STL...
reverse_col_iterator col_rbegin(const size_type col)
Returns a read/write reverse iterator that points to the last element of the column column in the Gra...
slip::GrayscaleImage< char > GrayscaleImage_c
char alias
reverse_iterator2d rupper_left()
Returns a read/write reverse iterator2d. It points to the bottom right element of the Matrix...
std::ostream & operator<<(std::ostream &out, const Array< T > &a)
void fill(const T *value)
Fills the container range [begin(),begin()+size()) with a copy of the value array.
void fill(const T &value)
Fills the container range [begin(),begin()+size()) with copies of value.
void swap(self &M)
Swaps data with another GrayscaleImage.
std::reverse_iterator< col_iterator > reverse_col_iterator
This is some iterator to iterate a 2d container into two Range defined by the indices and strides of ...
self & operator+=(const T &val)
Add val to each element of the GrayscaleImage.
std::reverse_iterator< iterator2d > reverse_iterator2d
slip::GrayscaleImage< unsigned int > GrayscaleImage_ui
unsigned int alias
iterator end()
Returns a read/write iterator that points one past the last element in the Matrix. Iteration is done in ordinary element order.
slip::stride_iterator< const_pointer > const_col_iterator
Provides a class to manipulate Numerical Matrix.
Provides some algorithms to apply C like functions to ranges.
std::reverse_iterator< const_iterator > const_reverse_iterator
iterator2d upper_left()
Returns a read/write iterator2d that points to the first element of the GrayscaleImage. It points to the upper left element of the GrayscaleImage.
slip::GrayscaleImage< unsigned char > GrayscaleImage_uc
unsigned char alias
Provides a class to iterate a 1d range according to a step.
row_iterator row_begin(const size_type row)
Returns a read/write iterator that points to the first element of the row row in the GrayscaleImage...
reverse_row_iterator row_rend(const size_type row)
Returns a read/write reverse iterator that points one past the first element of the row row in the Gr...
bool operator==(const Array< T > &x, const Array< T > &y)
slip::GrayscaleImage< double > GrayscaleImage_d
double alias
reverse_iterator2d rbottom_right()
Returns a read/write reverse iterator2d. It points to past the upper left element of the Matrix...
slip::GrayscaleImage< float > GrayscaleImage_f
float alias
col_iterator col_end(const size_type col)
Returns a read/write iterator that points one past the end element of the column column in the Graysc...
Color< T > operator*(const Color< T > &V1, const Color< T > &V2)
Provides a class to manipulate iterator2d within a slip::Range. It is used to iterate throw 2d contai...
reverse_iterator2d rupper_left()
Returns a read/write reverse iterator2d. It points to the bottom right element of the GrayscaleImage...
std::reverse_iterator< const_iterator > const_reverse_row_iterator
pointer operator[](const size_type i)
Subscript access to the row datas contained in the GrayscaleImage.
reverse_col_iterator col_rend(const size_type col)
Returns a read/write reverse iterator that points one past the first element of the column column in ...
T & max(const GrayscaleImage< T > &M1)
Returns the max element of a GrayscaleImage.
SubType stop() const
Accessor of the stop subscript of the Range.
Color< T > operator/(const Color< T > &V1, const Color< T > &V2)
T & max() const
Returns the max element of the GrayscaleImage according to the operator <.
std::reverse_iterator< const_col_iterator > const_reverse_col_iterator
bool operator>=(const Array< T > &x, const Array< T > &y)
Color< T > operator-(const Color< T > &V1, const Color< T > &V2)
std::reverse_iterator< iterator2d_range > reverse_iterator2d_range
size_type dim1() const
Returns the number of rows (first dimension size) in the GrayscaleImage.
std::reverse_iterator< const_col_range_iterator > const_reverse_col_range_iterator