class cv::Moments

Overview

struct returned by cv::moments More…

#include <types.hpp>

class Moments
{
public:
    // fields

    double m00;
    double m10;
    double m01;
    double m20;
    double m11;
    double m02;
    double m30;
    double m21;
    double m12;
    double m03;
    double mu20;
    double mu11;
    double mu02;
    double mu30;
    double mu21;
    double mu12;
    double mu03;
    double nu20;
    double nu11;
    double nu02;
    double nu30;
    double nu21;
    double nu12;
    double nu03;

    // construction

    Moments();

    Moments(
        double m00,
        double m10,
        double m01,
        double m20,
        double m11,
        double m02,
        double m30,
        double m21,
        double m12,
        double m03
        );
};

Detailed Documentation

struct returned by cv::moments

The spatial moments \(\texttt{Moments::m}_{ji}\) are computed as:

\[\texttt{m} _{ji}= \sum _{x,y} \left ( \texttt{array} (x,y) \cdot x^j \cdot y^i \right )\]

The central moments \(\texttt{Moments::mu}_{ji}\) are computed as:

\[\texttt{mu} _{ji}= \sum _{x,y} \left ( \texttt{array} (x,y) \cdot (x - \bar{x} )^j \cdot (y - \bar{y} )^i \right )\]

where \((\bar{x}, \bar{y})\) is the mass center:

\[\bar{x} = \frac{\texttt{m}_{10}}{\texttt{m}_{00}} , \; \bar{y} = \frac{\texttt{m}_{01}}{\texttt{m}_{00}}\]

The normalized central moments \(\texttt{Moments::nu}_{ij}\) are computed as:

\[\texttt{nu} _{ji}= \frac{\texttt{mu}_{ji}}{\texttt{m}_{00}^{(i+j)/2+1}} .\]

\(\texttt{mu}_{00}=\texttt{m}_{00}\), \(\texttt{nu}_{00}=1\) \(\texttt{nu}_{10}=\texttt{mu}_{10}=\texttt{mu}_{01}=\texttt{mu}_{10}=0\), hence the values are not stored.

The moments of a contour are defined in the same way but computed using the Green’s formula (see http://en.wikipedia.org/wiki/Green_theorem). So, due to a limited raster resolution, the moments computed for a contour are slightly different from the moments computed for the same rasterized contour.

Since the contour moments are computed using Green formula, you may get seemingly odd results for contours with self-intersections, e.g. a zero area (m00) for butterfly-shaped contours.

Construction

Moments()

the default constructor

Moments(
    double m00,
    double m10,
    double m01,
    double m20,
    double m11,
    double m02,
    double m30,
    double m21,
    double m12,
    double m03
    )

the full constructor