Add a note about cxx11 range-based loop in Mat_ documentation

pull/9032/head
Vladislav Sovrasov 8 years ago
parent e5aa213554
commit 267fdc4c91
  1. 19
      modules/core/include/opencv2/core/mat.hpp

@ -2063,7 +2063,7 @@ protected:
/** @brief Template matrix class derived from Mat /** @brief Template matrix class derived from Mat
@code @code{.cpp}
template<typename _Tp> class Mat_ : public Mat template<typename _Tp> class Mat_ : public Mat
{ {
public: 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 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 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: these two classes can be freely but carefully converted one to another. For example:
@code @code{.cpp}
// create a 100x100 8-bit matrix // create a 100x100 8-bit matrix
Mat M(100,100,CV_8U); Mat M(100,100,CV_8U);
// this will be compiled fine. no any data conversion will be done. // 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 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 `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: and run at the same speed, but the latter is certainly shorter:
@code @code{.cpp}
Mat_<double> M(20,20); Mat_<double> M(20,20);
for(int i = 0; i < M.rows; i++) for(int i = 0; i < M.rows; i++)
for(int j = 0; j < M.cols; j++) 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<double>(0,0)/E.at<double>(M.rows-1,0); cout << E.at<double>(0,0)/E.at<double>(M.rows-1,0);
@endcode @endcode
To use Mat_ for multi-channel images/matrices, pass Vec as a Mat_ parameter: 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) // allocate a 320x240 color image and fill it with green (in RGB space)
Mat_<Vec3b> img(240, 320, Vec3b(0,255,0)); Mat_<Vec3b> img(240, 320, Vec3b(0,255,0));
// now draw a diagonal white line // 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 i = 0; i < img.rows; i++)
for(int j = 0; j < img.cols; j++) for(int j = 0; j < img.cols; j++)
img(i,j)[2] ^= (uchar)(i ^ 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_<uchar>& I, const uchar* const table)
{
for(auto& pixel : I)
{
pixel = table[pixel];
}
}
@endcode @endcode
*/ */
template<typename _Tp> class Mat_ : public Mat template<typename _Tp> class Mat_ : public Mat

Loading…
Cancel
Save