OpenCV中的数据类型
OpenCV有很多数据类型,它们都基于一些重要视觉概念的抽象而设计,来提供相对简单,直观的表示和处理。
从组织结构的角度而言,OpenCV的基础数据类型主要分为三类
第一类,直接从C++原语中继承的基础数据类型(如int和float),这些类型包括简单的数组和矩阵。
第二类,辅助对象,这些对象代表更抽象的概念,比如垃圾收集指针,用于数据切片的范围对象(range objects)
第三类,大型数组类型,典型的代表是cv::Mat类,该类用来代表任意维度的包含任意基础元素的数组。
除了这些,OpenCV还有很多标准模板库(STL)。
基础类型介绍
每一个基础类型实际上都是一个相对复杂的类,支持它自己的接口函数、重载以及类似的操作
1.Point类
这个类是OpenCV的基础类型,Point可能是最简单的,它是一个点模板类。
它们可以成为任何类型的点,如整型和浮点型,还分为二维点模板类Point_和三维点模板类Point3_,源代码中定义为:
typedef Point_<int> Point2i;
typedef Point2i Point;
typedef Point_<float> Point2f;
typedef Point_<double> Point2d;
typedef Point3_<int> Point3i;
typedef Point3_<float> Point3f;
typedef Point3_<double> Point3d;
所以在大多数程序中,Point类是通过类似于cv::Point2i和cv:Point3f这类别名来实例化的,别名的最后一个字母表示构造该点需要的原语:
- b是一个无符号字符
- s是一个短整型
- i是一个32位整型
- f是一个32位浮点数
- d是一个64位浮点数
Point类原生支持的函数列表:
操作 | 示例 |
---|---|
默认构造函数 | cv::Point2i p; cv::Point3i p; |
复制构造函数 | cv::Point3f p2(p1); |
值构造函数 | cv::Point2i(x0, x1); cv::Point3d p(x0,x1,x2); |
构造成固定向量类 | (cv::Vec3f) p; |
成员访问 | p.x, p.y; |
点乘 | float x = p1.dot(p2); |
双精度点乘 | double y = p1.dot(p2); |
叉乘 | p1.cross(p2); |
判断一个点p是否在举行r内 | p.inside(r); |
举个例子:
Point point;//创建一个2D点对象
point.x = 10;//初始化x坐标值
point.y = 8;//初始化y坐标值
或者
Point point = Point(10, 8);
2.Scalar类
cv::Scalar类是四维点类。在这个模板中,所有的成员都是双精度浮点数。定义如下:
template<typen