学习OpenCV3——了解OpenCV的数据类型

第3章 了解OpenCV的数据类型

  • 1. OpenCV数据类型分类
    • 1.1 基础数据类型分类:
    • 1.2 基础类型概述
  • 2. 深入了解基础类型
    • 2.1 Point类
    • 2.2 Scalar类
    • 2.3 size类

1. OpenCV数据类型分类

1.1 基础数据类型分类:

  • 第一类是直接从C++继承的基础数据类型,比如 int,float 等。这些类型包括简单的数组和矩阵,同时也代表一些简单的几何概念,比如 矩形大小 等;
  • 第二类是辅助对象。这些对象代表更抽象的概念,比如 垃圾收集指针类,用于数据切片的范围对象 range objects, 以及 抽象的终止条件类
  • 第三类可以称为大型数组类型。这些对象原本目的是涵盖数组或一些其他的原语、程序集或更常见的基础数据类型。这一类的典型代表是 Mat 类,该类用来表示任意维度的包含任意基础元素的数组。存储图像是 Mat 类的特殊用途,这个类还涵盖其他类型,比如稀疏矩阵 SparseMat ,它更适用于直方图这样的稀疏数据。
  • 除了这些类型,OpenCV还使用了很多标准模板库(STL)。OpenCV相当依赖 vector 类, 许多OpenCV库函数在参数列表中有vector模板类。

1.2 基础类型概述

  • Vec<> 是固定向量类,它是用来处理小型响亮的。
  • Matx<> 是固定矩阵类(注意不是 Mat) ,它并不是用于大型数组的,而是用于一些特定的小型矩阵操作。固定矩阵类的维度在编译之前必须已知,这使得它的运算效率高,同时消除了许多动态内存分配操作。

2. 深入了解基础类型

2.1 Point类

  • Point类的实现基于一个基础模板结构,所以它可以成为任何类型的点,如整型和浮点型。这里有两个模板,一个是二维点,一个是三维点。Point类的巨大优势就是简单并且开销小。它也可以转换成更广义的类型,比如在需要的时候可以转换为固定向量类或者是固定矩阵类。
  • Point 类通过 Point2i , Point3f 这类别名来实例化。 最后一个字母的含义是:b是无符号字符,s是短整型,i是32位整型,f是32位浮点数,d是64位浮点数。
  • 直接受Point类支持的操作
操作 示例
默认构造函数 Point2i p
复制构造函数 Point3f p2(p1)
值构造函数 Point2i(x0,x1)
构造成固定向量类 (Vec3f) p
成员访问 p.x, p.y
点乘 float x = p1.dot(p2)
双精度点乘 double x = p1.ddot(p2)
叉乘 p1.cross(p2) 针对三维点
判断一个点p是否在矩形r内 p.inside( r ) 针对二维点

2.2 Scalar类

  • Scalar是四维点类。
操作 示例
默认构造函数 Scalar s
复制构造函数 Scalar s2(s1)
值构造函数 Scalar s(x0) ; Scalar s(x0,x1,x2,x3)
构造成固定向量类 (Vec3f) p
元素相乘 s1.mul(s2)
(四元数)共轭 s.conj(); // return Scalar(s0, -s1, -s2, -s3)
(四元数)真值测试 s.isReal(); // return true, if s0 == s1== s2 ==s3)

2.3 size类

  • size类在实际操作时与Point类似,而且可以与其相互转换。这两者之间主要的区别在于Point类的数据成员是xy,而size类的成员是widthheight
  • size类的三个别名是 SizeSize2i, Size2f,前面两个是等价的。
  • size类不支持转换为固定向量类,这一点与Point类不同。但是Point类和固定向量类都可以转成size
操作 示例
默认构造函数 Size sz, Size2i sz, Size2f sz
复制构造函数 Size sz2(sz1)
值构造函数 Size sz(w,h)
成员访问 sz.width, sz.height
计算面积 sz.area()

你可能感兴趣的:(OpenCV,opencv,数据类型)