opencv 2.2.0

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Public Attributes | Protected Attributes | List of all members
cv::NAryMatIterator Class Reference

`#include <core.hpp>`

## Public Member Functions
void | init (const Mat **arrays, Mat *planes, int narrays=-1)
| the separate iterator initialization method
| NAryMatIterator ()
| the default constructor
| NAryMatIterator (const Mat **arrays, Mat *planes, int narrays=-1)
| the full constructor taking arbitrary number of n-dim matrices
NAryMatIterator & | operator++ ()
| 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
int | narrays
| the number of arrays
int | nplanes
| the number of planes in each array
Mat * | planes
| the current planes

## Protected Attributes
int | idx
int | iterdepth

## 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

cv::NAryMatIterator::NAryMatIterator | ( |  | ) |

the default constructor

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,
|  | 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

const Mat** cv::NAryMatIterator::arrays

the iterated arrays

int cv::NAryMatIterator::idx
| protected

int cv::NAryMatIterator::iterdepth
| protected

int cv::NAryMatIterator::narrays

the number of arrays

int cv::NAryMatIterator::nplanes

the number of planes in each array

Mat* cv::NAryMatIterator::planes

the current planes

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

- /usr/obj/OpenCV-2.2.0/OpenCV-2.2.0/modules/core/include/opencv2/core/core.hpp