OpenCV有很多数据类型,从组织结构的角度来看,OpenCV的基础类型类型主要分为三类。第一类是直接从C++原语中继承的基础数据类型;第二类是辅助对象;第三类是大型数据类型。本文主要介绍OpenCV的基础数据类型。
目录
Point类
cv::Point类是两到三个原语类型的容器,其成员是通过变量名称x、y、z访问的,而不是通过下标访问。Point类是通过自己的模板派生来的,这是一个基础模板;实际上由两个这样的模板,分别是给二维、三维的点提供的。这些类的实例有cv::Point2i、cv::Point2f、cv::Point2d或cv::Point3i、cv::Point3f、cv::Point3d(在这里,最后一个字母表示构造该点所需要的原语,i是一个32位整形,f是一个32位浮点数,d是一个64位浮点数,还可以有无符号字符b和短整型s)。
优势:简单且开销小。Point类可以转换成固定向量类或固定矩阵类,同样也可由它们转换得到Point类。
| 操作 | 示例 |
|---|---|
| 默认构造函数 | cv::Point2i p2; cv::Point3i p3; |
| 复制构造函数 | cv::Point3i p1( p ); 注:若p为浮点型,则会自动取整 |
| 值构造函数 | cv::Point2i( x0, x1 ); cv::Point3d( x0, x1, x2 ); |
| 构造成固定向量类 | (cv::Vec3f) p; |
| 成员访问 | p.x, p.y, p.z |
| 点乘 | float x = p1.dot( p ); |
| 双精度点乘 | double x = p1.dot( p ); |
| 叉乘 | p1.cross( p ); 注:只用于三维的点 |
| 判断一个点p是否在矩形r内 | p1.inside( r ); 注:只用于二维的点 |
Scalar类
cv::Scalar是四维点类,是四维双精度向量的快速表示。cv::Scalar直接从固定向量类模板实例(cv::Vec<double, 4>)中继承而来,所以继承了所有向量代数操作、成员访问函数(比如[]操作符)和一些固定向量类的特性,如:其元素是通过整数下标来访问的。
| 操作 | 示例 |
|---|---|
| 默认构造函数 | cv::Scalar s; |
| 复制构造函数 | cv::Scalar s2( s1 ); |
| 值构造函数 | cv::Scalar s( x0 ); cv::Scalar s( x0, x1, x2, x3 ); |
| 元素相乘 | s1.mul( s2 ); |
| (四元数)共轭 | s.conj(); // return cv::Scalar( x0, -x1, -x2, -x3 ); |
| (四元数)真值测试 | s.isReal(); // if x1 == x2 == x3 == 0{ return true; } |
Size类
Size类在实际操作时和Point类相似,可以进行互相转换。主要区别在于Size类中对应的成员是width和height,而不是x和y,并且不支持转换到固定向量类。Size类的别名有cv::Size、cv::Size2i和cv::Size2f,其中前两个都表示整型,最后一个表示单精度浮点型。

本文介绍了OpenCV的基础数据类型,包括Point类、Scalar类、Size类、Rect类、RotatedRect类、固定矩阵类、固定向量类和复数类。Point类是二维和三维点的容器,Scalar类用于快速表示四维向量,Size类表示尺寸,Rect类描述矩形,RotatedRect类表示旋转矩形,固定矩阵和固定向量类提供了高效的内存管理,复数类则涵盖了单精度和双精度复数。
最低0.47元/天 解锁文章
9万+

被折叠的 条评论
为什么被折叠?



