CvMat Matrix Structure
There are two things you need to know before we dive into the matrix business. First, there is no "vector" construct in OpenCV. Whenever we want a vector, we just use a matrix with one column (or one row, if we want a transpose or conjugate vector). Second, the concept of a matrix in OpenCV is somewhat more abstract than the concept you learned in your linear algebra class. In particular, the elements of a matrix need not themselves be simple numbers. For example, the routine that creates a new two-dimensional matrix has the following prototype:
CvMat* cvCreateMat ( int rows, int cols, int type );
Here type
can be any of a long list of predefined
types of the form: CV_<bit_depth>(S|U|F)
C<number_of_channels>
. Thus, the matrix could consist of 32-bit floats
(CV_32FC1
), of unsigned integer 8-bit triplets
(CV_8UC3
), or of countless other elements. An element
of a CvMat
is not necessarily a single number. Being able
to represent multiple values for a single entry in the matrix allows us to do things like
represent multiple color channels in an RGB image. For a simple image containing red, green
and blue channels, most image operators will be applied to each channel separately (unless
otherwise noted).
Internally, the structure of CvMat
is relatively
simple, as shown in Example 3-1 (you can see this
for yourself by opening up …/opencv/cxcore/include/cxtypes.h). Matrices have a width, a height, a type, a
step (the length of a row in bytes, not int
s or float
s), and ...
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.