OpenCV学习心得——基础篇——了解OpenCV数据类型——基本数据类型与详解

opencv学习心得——基础篇——了解OpenCV数据类型——基本数据类型与详解
FOR THE SIGMA
FOR THE GTINDER
FOR THE ROBOMASTER

简介:

这一系列的学习心得第一轮将参考《学习OpenCV3》一书

操作系统版本:Ubuntu16.04(在这里博主在Linux下进行运行的)
http://www.ubuntu.org.cn/download/desktop 桌面版ubuntu16.04 下载

电子版书籍下载地址
暂无资源

内容:

OpenCV的基础数据类型主要分为3类:
1.第一类为直接从C++原语中继承的基础数据类型(如int和float等),包含了基础的矩阵与数列,同时也代表一些简单的几何概念,比如点、矩形、大小等。
2.第二类为辅助对象,这些对象代表更加抽象的事物,例如垃圾收集指针类,数据切片的范围对象(range objects)以及终止条件类。
3.第三类为大型数组类型,典型的例如cv::Mat类,用来代表任意维度的包含任意基础元素的数组,还有cv::SparseMat类。

其中基本数据类型是模板类cv::Vec<>,一个原语的容器类(固定向量类)
我们一般都会这么使用它:
cv::Vec2i #这表示2个元素的整型变量
cv::Vec4d #这表示4个元素的双精度浮点向量

模板类cv::Matx<>为固定矩阵类,这并不是用于大型数据组的,而是用于一些特殊的小型矩阵操作,例如4 x 4以下的矩阵
其优点为运算效率高,同时消除了许多动态内存分配的操作;缺点是其维度必须在编译前已知。

模板类cv::Point是两到三个原语类型的容器,其并非为从固定向量类继承,而是自己派生的,但是可以从固定向量类转换过来,其成员是通过名称变量访问的(mypoint.x, mypoint.y等)
cv::Point2i
cv::Point2f
cv::Point2d
参考: https://www.jianshu.com/p/f24ef76de1ba

模板类cv::Scalar为四维Point类,一般称为双精度四元素向量,其对象元素是通过整数下注来访问的,继承自cv::Vec<double,4>
关于其详细的底层细节可以自行查看 …/opencv2/core/core.hpp

基本数据类型详解:
point类:可以变成任何类型的点,例如整型和浮点型等,有两个模板,一个给二维点提供,另一个给三维点提供。由于其简单开销小,同时还可以转换成固定向量类与固定矩阵类。

默认构造函数 cv::Point2i p;
复制构造函数 cv::Point3f p2(p1);
值构造类函数 cv::Point2i(x0,x1);
点乘 float x = p1.dot(p2)
双精度点乘 double x = p1.dot(p2)

Scalar类:四维点类,访问它的别名会返回一个该模板的实例,成员均为双精度浮点数,它是很少几个对各类型的四维向量有用的成员函数,其继承了所有的向量代数操作、成员访问函数和一些固定向量类的特性。
默认构造函数 cv::Scarlar s;
复制构造函数 cv::Scarlar s2(s1);
值构造类函数 cv::Scarlar s(x0,x1,x2,x3);
元素相乘 s1.mul(s2);
(四元数)共轭 s.conj();

Size类:与point不同的是point的数据成员为x,y等,而size类对应的成员为width和height。
默认构造函数 cv::Size sz;
复制构造函数 cv::Size2i sz2(sz1);
值构造类函数 cv::Size2f sz(w,h);
成员访问 sz.width ; sz.height;
计算面积 sz.area();
size类不支持转换到固定向量类。

Rect类
矩形类包含Point类的成员x和y和size类的成员width和height。然而矩形类并不是从Point类继承过来的,所以它并没有从它们那你继承操作。
默认构造函数 cv::Rect r;
复制构造函数 cv::Rect r2(r1);
值构造类函数 cv::Rect r(x,y,w,h);
成员访问 r.x ; r.y ; r.width ; r.height;
计算面积 r.area();

覆写操作符
矩形r1和矩形r2的交集 cv::Rect r3 = r1 & r2; r1 & r2;
同时包含矩形r1和矩形r2的最小面积矩形 cv::Rect r3 = r1 | r2 ; r1 |= r2;

RotatedRect类
cv::RotatedRect类是OpenCV中少数底层没有使用模板的C++接口之一。同时包含一个中心点cv::Point2f、一个大小cv::Size2f和一个额外的角度floatd的容器。其中float的角度代表图形绕中心点旋转的角度。
默认构造函数 cv::RotatedRect rr();
复制构造函数 cv::RotatedRect rr2(rr1);
从两个点构造 cv::RotatedRect(p1,p1);
成员访问 rr.center , rr.size , rr.angle
返回四个角的列表 rr.points(pts[4]);

Matx类
应用于编译时便已知维度的矩形的情况,其所有数据都是在堆栈上分配的,所以他们的分配与清除都很快。对固定矩阵类的操作运行很快;同时他们也在小型矩阵上做过很多优化(特别针对于2x2,3x3等)。

Vec类
固定向量类从固定矩阵类派生出来的,它们只是为了更方便地使用cv::Matx。在继承的意义上来说,固定向量模板cv::Vec是列表为1的cv::Matx
默认构造函数 Vec2s v2s; Vec6f v6f;
复制构造函数 Vec3f u3f( v3f );
值构造函数 Vec2f v2f(x0,x1); Vec6d v6d(x0,x1,x2,x3,x4,x5);
成员访问 v4f[i]; v3w(j);
向量叉乘 V3f.cross( u3f );

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值