OpenCV 的基本数据类型 OpenCV 提供了多种基本数据类型。虽然这些数据类型在 C 语言中不是基本类型,但结构都很简单,可将它们作为原子类型。可以在―…/OpenCV/cxcore/include‖目录下的cxtypes.h 文件中查看其详细定义。 在这些数据类型中最简单的就是 CvPoint。CvPoint 是一个包含 integer 类型成员 x 和 y 的简单结构体。CvPoint 有两个变体类型:CvPoint2D32f 和 CvPoint3D32f。前者同样有两个成员x,y,但它们是浮点类型;而后者却多了一个浮点类型的成员 z。 CvSize 类型与 CvPoint 非常相似,但它的数据成员是 integer 类型的width 和 height。如果希望使用浮点类型,则选用 CvSize 的变体类型CvSize2D32f。 CvRect 类型派生于 CvPoint 和 CvSize,它包含 4 个数据成员:x,y,width 和 height。(正如你所想的那样,该类型是一个复合类型)。 下一个(但不是最后一个)是包含 4 个整型成员的CvScalar 类型,当内存不是问题时,CvScalar 经常用来代替 1,2 或者 3 个实数成员(在这个情况下,不需要的分量被忽略)。CvScalar有一个单独的成员 val,它是一个指向 4 个双精度浮点数数组的指针。 所有这些数据类型具有以其名称来定义的构造函数,例如 cvSize()。(构造函数通常具有与结构类型一样的名称,只是首字母不大写)。记住,这是 C 而不是 C++,所以这些构造函数只是 内 联 函 数, 它 们 首 先 提取 参 数列 表 , 然 后 返 回 被 赋 予 相 关 值 的结构。 【31】 各数据类型的内联构造函数被列在表 3-1 中:cvPointXXX(),cvSize(),cvRect()和 cvScalar()。这些结构都十分有用,因为它们不仅使代码更容易编写,而且也更易于阅读。假设要在(5,10)和(20,30)之间画一个白色矩形,只需简单调用: cvRectangle( myImg, cvPoint(5,10), cvPoint(20,30), cvScalar(255,255,255) ); 表 3-1:points, size, rectangles 和 calar 三元组的结构 结构 成员 意义 CvPoint int x, y 图像中的点 CvPoint2D32f float x, y 二维空间中的点 CvPoint3D32f float x, y, z 三维空间中的点 CvSize int width, height 图像的尺寸 CvRect int x, y, width, height 图像的部分区域 CvScalar double val[4] RGBA 值 cv Scalar 是一个特殊的例子:它有3 个构造函数。第一个是cv Scalar(),它需要一个、两个、三个或者...