OpenCV的基本数据结构
CvPoint:表示图像中的点
CvPoint2D32f:二维空间中的点
CvPoint3D32f:三维空间中的点
这些都是结构体,并不是C++语言中的类,所以他们的构造函数就是简单的内联函数。
1 typedef struct CvPoint 2 { 3 int x; 4 int y; 5 } 6 CvPoint; 7 8 9 CV_INLINE CvPoint cvPoint( int x, int y ) 10 { 11 CvPoint p; 12 13 p.x = x; 14 p.y = y; 15 16 return p; 17 }
其中的CV_INLINE就是一个宏定义:
1 define CV_INLINE inline
CvSize:表示图像的尺寸
CvSize2D32f:浮点型数据表示图像的尺寸
1 typedef struct CvSize 2 { 3 int width; 4 int height; 5 } 6 CvSize; 7 8 CV_INLINE CvSize cvSize( int width, int height ) 9 { 10 CvSize s; 11 12 s.width = width; 13 s.height = height; 14 15 return s; 16 }
CvRect表示图像的部分区域
1 typedef struct CvRect 2 { 3 int x; 4 int y; 5 int width; 6 int height; 7 } 8 CvRect; 9 10 CV_INLINE CvRect cvRect( int x, int y, int width, int height ) 11 { 12 CvRect r; 13 14 r.x = x; 15 r.y = y; 16 r.width = width; 17 r.height = height; 18 19 return r; 20 }
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处理。