一、CvMat结构体
typedef struct CvMat
{
int type;
int step;
int* refcount;
int hdr_refcount;
union
{
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data;
union
{
int rows;
int height;
};
union
{
int cols;
int width;
};
} CvMat;
二、矩阵的创建和释放
CvMat* cvCreateMat(int rows,int cols,int type);
CvMat* cvCreateMatHeader(int rows,int cols,int type);
CvMat* cvInitMatHeader(int rows,int cols,int type,void* data = NULL,int step = CV_AUTOSTEP);
CvMat* cvMat(int rows,int cols,int type,void* data = NULL)
CvMat* cvCloneMat(const cvMat* mat);
cvReleaseMat(CvMat** mat);
三、矩阵数据的存取
1·简单的方法
利用CV_MAT_ELEM()或CV_MAT_ELEM_PTR()宏
例:CV_MAT_ELEM()
CvMat* mat = cvCreateMat(5,5,CV_32FC1);
float element_3_2 = CV_MAT_ELEM( *mat,float,3,2);
例:CV_MAT_ELEM_PTR()
CvMat* mat = cvCreateMat(5,5,CV_32FC1);
float element_3_2 = 7.7;
(float)CV_MAT_ELEM_PTR(*mat,3,2) = element_3_2;
2·麻烦的方法
指针访问矩阵结构cvPtr*D家族和cvGet*D、cvSet*D家族;
uchar* cvPtr1D(const CvArr* arr,int idx0,int* type = NULL);
uchar* cvPtr2D(const CvArr* arr,int idx0,int idx1,int* type = NULL);
uchar* cvPtr3D(const CvArr* arr,int idx0,int idx1,int idx2,int* type = NULL);
uchar* cvPtrND(const CvArr* arr,int* idx,int* type = NULL,int create_node = 1,unsigned* precalc_hashval = NULL);
double cvGetReal1D(const CvArr* arr,int idx0);
double cvGetReal2D const CvArr* arr,int idx0,int idx1);
double cvGetReal3D(const CvArr* arr,int idx0,int idx1,int idx2);
double cvGetRealND(const CvArr* arr,int* idx);
CvScalar cvGet1D(const CvArr* arr,int idx0);
CvScalar cvGet2D(const CvArr* arr,int idx0,int idx1 );
CvScalar cvGet3D(const CvArr* arr,int idx0,int idx1,int idx2 );
CvScalar cvGetND(const CvArr* arr,int* idx);
double cvSetReal1D(const CvArr* arr,int idx0);
double cvSetReal2D const CvArr* arr,int idx0,int idx1);
double cvSetReal3D(const CvArr* arr,int idx0,int idx1,int idx2);
double cvSetRealND(const CvArr* arr,int* idx);
CvScalar cvSet1D(const CvArr* arr,int idx0);
CvScalar cvSet2D(const CvArr* arr,int idx0,int idx1 );
CvScalar cvSet3D(const CvArr* arr,int idx0,int idx1,int idx2 );
CvScalar cvSetND(const CvArr* arr,int* idx);