OpenCV学习笔记(二)基本数据类型

2017-10-15  本文已影响0人  一个三要不起

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类用来指定连续的子序列。

上一篇下一篇

猜你喜欢

热点阅读