OpenCV学习(2)--基本数据结构

时间:2022-05-27 17:21:14

OpenCV的基本数据结构

CvPoint:表示图像中的点

CvPoint2D32f:二维空间中的点

CvPoint3D32f:三维空间中的点

这些都是结构体,并不是C++语言中的类,所以他们的构造函数就是简单的内联函数。

 typedef struct CvPoint
{
int x;
int y;
}
CvPoint; CV_INLINE CvPoint cvPoint( int x, int y )
{
CvPoint p; p.x = x;
p.y = y; return p;
}

其中的CV_INLINE就是一个宏定义:

 define CV_INLINE inline

CvSize:表示图像的尺寸

CvSize2D32f:浮点型数据表示图像的尺寸

 typedef struct CvSize
{
int width;
int height;
}
CvSize; CV_INLINE CvSize cvSize( int width, int height )
{
CvSize s; s.width = width;
s.height = height; return s;
}

CvRect表示图像的部分区域

 typedef struct CvRect
{
int x;
int y;
int width;
int height;
}
CvRect; CV_INLINE CvRect cvRect( int x, int y, int width, int height )
{
CvRect r; r.x = x;
r.y = y;
r.width = width;
r.height = height; return r;
}

CvScalar包含4个浮点型的成员,可以用来表示B、G、R、alpha。它有三个构造函数,具体的定义:


typedef struct CvScalar
{
double val[4];
}
CvScalar;


//至少传一个参数,如果后面三个没有,默认为0
CV_INLINE CvScalar cvScalar( double val0, double val1 CV_DEFAULT(0),
double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0))
{
CvScalar scalar;
scalar.val[0] = val0; scalar.val[1] = val1;
scalar.val[2] = val2; scalar.val[3] = val3;
return scalar;
}


//只对第一个参数赋值,后面的为0
CV_INLINE CvScalar cvRealScalar( double val0 )
{
CvScalar scalar;
scalar.val[0] = val0;
scalar.val[1] = scalar.val[2] = scalar.val[3] = 0;
return scalar;
}


//把四个参数都赋值为传入的那个参数
CV_INLINE CvScalar cvScalarAll( double val0123 )
{
CvScalar scalar;
scalar.val[0] = val0123;
scalar.val[1] = val0123;
scalar.val[2] = val0123;
scalar.val[3] = val0123;
return scalar;
}


CvArr、CvMat和IplImage关系

派生关系为:CvArr-->CvMat-->IplImage,当CvArr用作函数的参数的时候,无论传入的是CvMat还是IplImage,内部都是按CvMat处理。