Public Member Functions | Public Attributes | Protected Attributes
cv::NAryMatIterator Class Reference

n-Dimensional Dense Matrix Iterator Class. More...

#include <core.hpp>

List of all members.

Public Member Functions

 NAryMatIterator ()
 the default constructor
 NAryMatIterator (const Mat **arrays, uchar **ptrs, int narrays=-1)
 the full constructor taking arbitrary number of n-dim matrices
 NAryMatIterator (const Mat **arrays, Mat *planes, int narrays=-1)
 the full constructor taking arbitrary number of n-dim matrices
void init (const Mat **arrays, Mat *planes, uchar **ptrs, int narrays=-1)
 the separate iterator initialization method
NAryMatIteratoroperator++ ()
 proceeds to the next plane of every iterated matrix
NAryMatIterator operator++ (int)
 proceeds to the next plane of every iterated matrix (postfix increment operator)

Public Attributes

const Mat ** arrays
 the iterated arrays
Matplanes
 the current planes
uchar ** ptrs
 data pointers
int narrays
 the number of arrays
size_t nplanes
 the number of hyper-planes that the iterator steps through
size_t size
 the size of each segment (in elements)

Protected Attributes

int iterdepth
size_t idx

Detailed Description

n-Dimensional Dense Matrix Iterator Class.

The class cv::NAryMatIterator is used for iterating over one or more n-dimensional dense arrays (cv::Mat's).

The iterator is completely different from cv::Mat_ and cv::SparseMat_ iterators. It iterates through the slices (or planes), not the elements, where "slice" is a continuous part of the arrays.

Here is the example on how the iterator can be used to normalize 3D histogram:

 void normalizeColorHist(Mat& hist)
 {
 #if 1    
     // intialize iterator (the style is different from STL).
     // after initialization the iterator will contain
     // the number of slices or planes
     // the iterator will go through
     Mat* arrays[] = { &hist, 0 };
     Mat planes[1];
     NAryMatIterator it(arrays, planes);
     double s = 0;
     // iterate through the matrix. on each iteration
     // it.planes[i] (of type Mat) will be set to the current plane of
     // i-th n-dim matrix passed to the iterator constructor.
     for(int p = 0; p < it.nplanes; p++, ++it)
        s += sum(it.planes[0])[0];
     it = NAryMatIterator(hist);
     s = 1./s;
     for(int p = 0; p < it.nplanes; p++, ++it)
        it.planes[0] *= s;
 #elif 1
     // this is a shorter implementation of the above
     // using built-in operations on Mat
     double s = sum(hist)[0];
     hist.convertTo(hist, hist.type(), 1./s, 0);
 #else
     // and this is even shorter one
     // (assuming that the histogram elements are non-negative)
     normalize(hist, hist, 1, 0, NORM_L1);
 #endif
 }

You can iterate through several matrices simultaneously as long as they have the same geometry (dimensionality and all the dimension sizes are the same), which is useful for binary and n-ary operations on such matrices. Just pass those matrices to cv::MatNDIterator. Then, during the iteration it.planes[0], it.planes[1], ... will be the slices of the corresponding matrices


Constructor & Destructor Documentation

the default constructor

cv::NAryMatIterator::NAryMatIterator ( const Mat **  arrays,
uchar **  ptrs,
int  narrays = -1 
)

the full constructor taking arbitrary number of n-dim matrices

cv::NAryMatIterator::NAryMatIterator ( const Mat **  arrays,
Mat planes,
int  narrays = -1 
)

the full constructor taking arbitrary number of n-dim matrices


Member Function Documentation

void cv::NAryMatIterator::init ( const Mat **  arrays,
Mat planes,
uchar **  ptrs,
int  narrays = -1 
)

the separate iterator initialization method

NAryMatIterator& cv::NAryMatIterator::operator++ ( )

proceeds to the next plane of every iterated matrix

NAryMatIterator cv::NAryMatIterator::operator++ ( int  )

proceeds to the next plane of every iterated matrix (postfix increment operator)


Member Data Documentation

the iterated arrays

the current planes

data pointers

the number of arrays

the number of hyper-planes that the iterator steps through

the size of each segment (in elements)

size_t cv::NAryMatIterator::idx [protected]

The documentation for this class was generated from the following file: