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 ...
Get Learning OpenCV now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.