OpenCV学习笔记(二)基本数据类型
Point_
首先介绍2维点对Point_,它的是一个模板类。我们可以直接访问数据成员x,y。它不仅定了+、-、==、!=这4个基本的操作,还定义了点乘、叉乘等操作。特别的这个类还提供了inside函数来判断一个点是否在矩形区域内。此外,还定义了一些其他的类型转化函数,比如转化为1.X版本的CvPoint。
为了方便使用,opencv又对常用的类型进行了定义:
typedef Point_ Point2i;
typedef Point2i Point;
typedef Point_ Point2f;
typedef Point_ Point2d;
同理还有Point3_,只不过它是一个3维点(x,y,z)而已。它的常用类型是:
typedef Point3_ Point3i;
typedef Point3_ Point3f;
typedef Point3_ Point3d;
Size_
介绍完点,就可以介绍Size_了。它也是模板类。
typedef Size_ Size2i;
typedef Size2i Size;
typedef Size_ Size2f
Size能够访问的成员变量是height和width。还定义了area函数来求面积。其他的操作基本都是类型转化函数。
Rect_
下来介绍Rect_模版类。它是由左上角点和长度、宽度定义的。在opecv中,一般定义为左开右闭区间。有意思的是,这个类竟然也提供了一个Rect+Point的函数,作用是对矩形的偏移,还有一个Rect + Size的函数,在左上角不变的情况下,重新调整矩形的大小。其他的操作还有与&和|,是求两个矩形的交集和并集。
除了基本的矩形之外,opecv还提供了一个可以旋转的矩形RotatedRect,它是由中心、变长、旋转角度决定的。你可以访问它的这三个成员,也可以使用points函数返回它的4个顶点,使用boundingRect求出它的外接矩形(非旋转)。
Matx
下面介绍Matx类,这也是一个模板类,用来记录一些小的矩形。这些矩形在编译前大小就固定了:
typedef Matx Matx12f;
typedef Matx Matx12d;
...
typedef Matx Matx16f;
typedef Matx Matx16d;
typedef Matx Matx21f;
typedef Matx Matx21d;
...
typedef Matx Matx61f;
typedef Matx Matx61d;
typedef Matx Matx22f;
typedef Matx Matx22d;
...
typedef Matx Matx66f;
typedef Matx Matx66d;
如果要使用灵活的矩形,还是用Mat吧(下一章会介绍)。
Vec
下面介绍Vec类,它其实是元素较少的向量。
typedef Vec Vec2b;
typedef Vec Vec3b;
typedef Vec Vec4b;
typedef Vec Vec2s;
typedef Vec Vec3s;
typedef Vec Vec4s;
typedef Vec Vec2i;
typedef Vec Vec3i;
typedef Vec Vec4i;
typedef Vec Vec2f;
typedef Vec Vec3f;
typedef Vec Vec4f;
typedef Vec Vec6f;
typedef Vec Vec2d;
typedef Vec Vec3d;
typedef Vec Vec4d;
typedef Vec Vec6d;
它支持加、减、数乘、相等、不等、求范数等运算。
Scalar_
Scalar_类其实是用Vec派生下来的,也就是说,它是一个4元组:typedef Scalar_ Scalar;
他通常用来传递像素。
Range
Range类用来指定连续的子序列。