OpenCV提供了许多的基本数据类型,这里学习一些比较常用的数据类型。C接口的基本都是用结构体或联合体来实现基本数据类型,C++接口的话使用模板来实现,但对于使用者而言,其实都是一样的。这里以C接口的为例介绍。
1. CvPoint以及其变体
这单个结构都非常简单,用于表示二维或三维的点(确切的说是点的坐标,通常坐标都是以0为基点),既有表示整数也有表示浮点型的。他们的定义分别如下:
typedef struct CvPoint { int x; // X坐标 int y; // Y坐标 } CvPoint; typedef struct CvPoint2D32f { float x; // X坐标 float y; // Y坐标 } CvPoint2D32f; typedef struct CvPoint3D32f { float x; // X坐标 float y; // Y坐标 float z; // Z坐标 } CvPoint3D32f;
所有的OpenCV的数据类型都具有以其名称来定义的构造函数,例如cvPoint( )。(通常构造函数具有和结构类型一样的名称,只是首字母不大写)。因为C中没有类的概念,所以构造函数其实都是由内联函数实现的。比如上面介绍的3种类型都有如下构造函数:
inline CvPoint cvPoint(int x, int y); inline CvPoint2D32f cvPoint2D32f(double x, double y); inline CvPoint3D32f cvPoint3D32f(double x, double y, double z); /* * 除了基本的构造函数以外,往往还可以通过一些转换函数进行构造 */ inline CvPoint cvPointFrom32f(CvPoint2D32f point); inline CvPoint2D32f cvPointTo32f(CvPoint point);
2. CvSzie以及其变体
这三个结构都和矩形有关系,前两个结构都用来表示矩形框的大小,第一个以像素为精度,第二个以亚像素为精度。CvRect结构用于表示矩形框的偏移和大小。他们的定义及其构造函数如下:
typedef struct CvSize { int width; // 矩形宽 int height; // 矩形高 } CvSize; inline CvSize cvSize(int width, int height) { CvSize s; s.width = width; s.height = height; return s; } typedef struct CvSize2D32f { float width; // 矩形宽 float height; // 矩形高 } CvSize2D32f; inline CvSize2D32f cvSize2D32f(double width, double height) { CvSize2D32f s; s.width = (float)width; s.height = (float)height; return s; } typedef struct CvRect { int x; // 方形的最左角的X坐标 int y; // 方形的最上或者最下角的Y坐标 int width; // 宽 int height; // 高 } CvRect; inline CvRect cvRect(int x, int y, int width, int height) { CvRect os; os.x = x; os.y = y; os.width = width; os.height = heigth; return os; }
3. CvScalar
这个结构也比较常用,它可以用来表示一个1、2、3、4元组(比如表示RGAB值)。定义如下:
typedef struct CvScalar { double val[4]; } CvScalar;
这个结构有3个构造函数:
/* * 第一个:cvScalar( )。他需要1~4个参数,如果参数不足4个,其他量默认为0。 */ inline CvScalar cvScalar(double val0, double val1, double val2, double val3) { CvScalar scalar; scalar.val[0] = val0; scalar.val[1] = val1; scalar.val[2] = val2; scalar.val[3] = val3; return scalar; } /* * 第二个:cvRealScalar().它只需要一个参数,用于初始化val[0],其他值设为0. */ inline CvScalar cvRealScalar(double val0) { CvScalar scalar; scalar.val[0] = val0; scalar.val[1] = 0; scalar.val[2] = 0; scalar.val[3] = 0; return scalar; } /* * 第三个:cvScalarAll(). 他需要一个参数,并且将val[]数组的4个元素都设为此值。 */ inline CvScalar cvRealScalar(double val) { CvScalar scalar; scalar.val[0] = val; scalar.val[1] = val; scalar.val[2] = val; scalar.val[3] = val; return scalar; }
更多的数据类型可以参考OpenCV官方文档:http://docs.opencv.org/modules/core/doc/core.html
评论已关闭