OpenCV中的基础数据类型中有三大类别
- 第一大类别是从C++中继承而来的基础数据类型(如int float等)包括数组,矩阵,可以来表示基础的几何概念如点,大小,矩形
- 第二大类别是辅助对象,这类对象代表更抽象的概念,比如垃圾收集指针类,,数据切片的对象
- 第三大类别是大型的数组类型,这类原本是涵盖数组或者一些原语、程序集或者更常见的数据类型,比如存储图片的cv::Mat
- opencv 还会非常经常的使用stl的内容
简单介绍
- cv::Vec<> 类,代表固定向量 cv::Matx<>固定矩阵类 ,这两个是维度要已知与上面相似的是cv::Point 类 这个不是固定向量类继承下来的,是由自己的模板派生的,他们的成员是通过名称变量转换得到
Point类可以通过别名来使用正确的末班 如 cv::Point2i cv::Point2f 等等, - cv::Scalar类本质上是个四维Point类,与Point类相似,但实际上与一个可以产生任意四元素向量的模板有关,
一般是双精度四元素向量的别名,cv::Scalar 是通过整数下标来访问的。这跟cv::Vec<>相同 这是因为cv::Scalar 直接继承的cv::Vec<>的实例 - cv::Rect和cv::Size 和Point类相似,继承自己的模板, Rect包含了Size里面的Height和width
其中两个整数类型就是自己的名称,浮点数是 Size2f, Rect 有个类是RotateRect 包含了一个cv::Point2f 的中心点,一个Size2f 的size 和一个额外的浮点类型的角度
cv::Point 类
- 最简单的类型,可以成为任何类型的点,如整形和浮点型等
- 大多数的程序中 Point类 通过类似cv::Point2i cv::Point3f 等实例化的,数字代表维度,后面的字母代表构造此实例的原语
- 这里有几个重要的受支持的操作,但是他们是通过隐式转换到固定向量类而受支持
- 包含所有向量和标量,封装了线性代数的操作符
操作 | 实例 |
---|
默认构造函数 | cv::Piont2i p; cv::point3i p; | 拷贝函数 | cv::Point3f p2(p1); | 构造函数 | cv::Piont2i p(x,y); cv::point3i p(x,y,z); | 构造成固定向量类 | (cv::Vec3f) p; | 成员访问 | p.x; p.y | 点乘 | float x = p1.dot(p2); double x = p1.dot(p2) | 叉乘 | p2 = cross(p2) | 判断点是否在行r内 | p.inside? |
cv::Scalar 类
操作 | 实例 |
---|
默认构造函数 | cv::Scalar s; | 拷贝函数 | cv::Scalar s2(s1); | 构造函数 | cv::Scalar s(x1); cv::Scalar s(x1,x2,x3,x4); | 元素相乘 | s1.mul(s2) | (四元数) 共轭 | s.conj(); | (四元数)真值测试 | s.isReal(); |
该类继承自想两类他继承了所有的向量操作
Size 类
Size 可以和Piont类互换
操作 | 实例 |
---|
默认构造函数 | cv::Size sz; cv::Size2i sz; cv::Size sz; | 拷贝函数 | cv::Size s2(s1); | 构造函数 | cv::Size sz(w,h) | 成员访问 | sz,.width;sz.height; | 计算面积 | sz.area; |
Rect 类
操作 | 实例 |
---|
默认构造函数 | cv::Rect r; | 拷贝函数 | cv::Rect r2(r1) | 构造函数 | cv::Rect r(x,y,w,h) cv::Rect(p, sz); cv:: Rect(p1,p2); | 成员访问 | r.x r.y r.width r.height | 计算面积 | r.area; | 提取左上角 | r.tl(); | 右下角 | r.br(); | p在矩形内 | c.contains§; |
操作 | 实例 |
---|
交集 | cv::Rect r3 = r1&r2; r2 &= r1; | 同时包含r1,r2的矩形 | cv::Rect r3 = r1 | 平移矩形rx个数量 | cv::Rect rx = r+x ; r += rx;(Point) | 扩大矩形rs大小 | cv::Rect rx = r+s; r+=s(size) | 判断相等不相等 | == != |
Matx 固定矩阵
为了编译已知维度的矩阵打造的,都是在堆栈上分配内存,分配和清除飞快,在小型的矩阵上面做过特别的优化,运行很快 固定向量类继承自固定矩阵,其他类继承自固定向量,可见此类的重要性 通常有别名格式 Matxx{1,2…6}{f,d} 1-6 的任何数 通常是早就已经知道矩阵大小用这个类 所以大型的图像矩阵或者其他灵活大小点阵,需要更大的类,那么就得使用cv::Mat
操作很多可以参考opencv官方文档,这里不列举了(累了)
固定向量类
也不介绍了,看文档吧
|