Integral Images
OpenCV allows you to calculate an integral image easily with the appropriately named
cvIntegral() function. An integral
image [Viola04] is a data structure that allows rapid summing of subregions.
Such summations are useful in many applications; a notable one is the computation of
Haar wavelets, which are used in some face recognition and similar
algorithms.
void cvIntegral( const CvArr* image, CvArr* sum, CvArr* sqsum = NULL, CvArr* tilted_sum = NULL );
The arguments to cvIntegral() are the original image
as well as pointers to destination images for the results. The argument sum is required; the others, sqsum and tilted_sum, may be provided if
desired. (Actually, the arguments need not be images; they could be matrices, but in
practice, they are usually images.) When the input image is 8-bit unsigned, the sum or tilted_sum may be
32-bit integer or floating-point arrays. For all other cases, the sum or tilted_sum must be floating-point
valued (either 32- or 64-bit). The result "images" must always be floating-point. If the
input image is of size W-by-H, then the output
images must be of size (W + 1)-by-(H + 1).
[86]
An integral image sum has the form:

The optional sqsum image is the sum of
squares:

and the tilted_sum is like the sum except that it is for the image rotated ...