From 267fdc4c91d7b427ae3b5efb8418b38064fa6fa8 Mon Sep 17 00:00:00 2001 From: Vladislav Sovrasov Date: Thu, 29 Jun 2017 11:26:54 +0300 Subject: [PATCH] Add a note about cxx11 range-based loop in Mat_ documentation --- modules/core/include/opencv2/core/mat.hpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/modules/core/include/opencv2/core/mat.hpp b/modules/core/include/opencv2/core/mat.hpp index 2c91a996fd..92d34c174e 100644 --- a/modules/core/include/opencv2/core/mat.hpp +++ b/modules/core/include/opencv2/core/mat.hpp @@ -2063,7 +2063,7 @@ protected: /** @brief Template matrix class derived from Mat -@code +@code{.cpp} template class Mat_ : public Mat { public: @@ -2075,7 +2075,7 @@ protected: The class `Mat_<_Tp>` is a *thin* template wrapper on top of the Mat class. It does not have any extra data fields. Nor this class nor Mat has any virtual methods. Thus, references or pointers to these two classes can be freely but carefully converted one to another. For example: -@code +@code{.cpp} // create a 100x100 8-bit matrix Mat M(100,100,CV_8U); // this will be compiled fine. no any data conversion will be done. @@ -2087,7 +2087,7 @@ While Mat is sufficient in most cases, Mat_ can be more convenient if you use a access operations and if you know matrix type at the compilation time. Note that `Mat::at(int y,int x)` and `Mat_::operator()(int y,int x)` do absolutely the same and run at the same speed, but the latter is certainly shorter: -@code +@code{.cpp} Mat_ M(20,20); for(int i = 0; i < M.rows; i++) for(int j = 0; j < M.cols; j++) @@ -2097,7 +2097,7 @@ and run at the same speed, but the latter is certainly shorter: cout << E.at(0,0)/E.at(M.rows-1,0); @endcode To use Mat_ for multi-channel images/matrices, pass Vec as a Mat_ parameter: -@code +@code{.cpp} // allocate a 320x240 color image and fill it with green (in RGB space) Mat_ img(240, 320, Vec3b(0,255,0)); // now draw a diagonal white line @@ -2107,6 +2107,17 @@ To use Mat_ for multi-channel images/matrices, pass Vec as a Mat_ parameter: for(int i = 0; i < img.rows; i++) for(int j = 0; j < img.cols; j++) img(i,j)[2] ^= (uchar)(i ^ j); +@endcode +Mat_ is fully compatible with C++11 range-based for loop. For example such loop +can be used to safely apply look-up table: +@code{.cpp} +void applyTable(Mat_& I, const uchar* const table) +{ + for(auto& pixel : I) + { + pixel = table[pixel]; + } +} @endcode */ template class Mat_ : public Mat