IplImage Data Structure
With all of that in hand, it is now easy to discuss the IplImage data structure. In essence this object is a CvMat but with some extra goodies buried in it to make the matrix interpretable
as an image. This structure was originally defined as part of Intel's Image Processing Library (IPL).[19] The exact definition of the IplImage
structure is shown in Example 3-10.
Example 3-10. IplImage header structure
typedef struct _IplImage {
int nSize;
int ID;
int nChannels;
int alphaChannel;
int depth;
char colorModel[4];
char channelSeq[4];
int dataOrder;
int origin;
int align;
int width;
int height;
struct _IplROI* roi;
struct _IplImage* maskROI;
void* imageId;
struct _IplTileInfo* tileInfo;
int imageSize;
char* imageData;
int widthStep;
int BorderMode[4];
int BorderConst[4];
char* imageDataOrigin;
} IplImage;As crazy as it sounds, we want to discuss the function of several of these variables. Some are trivial, but many are very important to understanding how OpenCV interprets and works with images.
After the ubiquitous width and height, depth and nChannels
are the next most crucial. The depth variable takes one
of a set of values defined in ipl.h, which are
(unfortunately) not exactly the values we encountered when looking at matrices. This is
because for images we tend to deal with the depth and the number of channels separately
(whereas in the matrix routines we tended to refer to them simultaneously). The possible
depths are listed in Table 3-2.
Table 3-2. OpenCV ...