转自 http://blog.csdn.net/yang_xian521/article/details/7108387

记得我在OpenCV学习笔记(四)——新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马虎了。对于新版本的数据结构,我再说说。

Point_类不用多言,里面两个成员变量x,y。Point_<int>就是Point2i,也是Point,Point_<float>就是Point2f,Point_<double>就是Point2d。

Point3_类不太常用,跟Point_类差不太多,成员变量x,y,z。

Size_类成员变量width、height。Size_<int>就是Size2i,也是Size,Size_<float>就是Size2f,大家就要不臆断出来个Size2d啥的让编译器发懵了。

Rect_类有些意思,成员变量x、y、width、height,分别为左上角点的坐标和矩形的宽和高。常用的成员函数有Size()返回值为一个Size,area()返回矩形的面积,contains(Point)用来判断点是否在矩形内,inside(Rect)函数判断矩形是否在该矩形内,tl()返回左上角点坐标,br()返回右下角点坐标。值得注意的是,如果想求两个矩形的交集,并集,可以用如下格式

  1. Rect rect = rect1 & rect2;
  2. Rect rect = rect1 | rect2;

如果想让矩形平移操作,缩放操作,甚至可以这样写

  1. Rect rectShift = rect + point;
  2. Rect rectScale = rect + size;

是不是很妙,可以大大减轻你的代码量。

Matx其实是个轻量级的Mat,必须在使用前规定好大小,比如一个2*3的float型的可以声明为Matx23f。我想很容易理解的。

Vec是Matx的一个派生类,就是一个1维的Matx,跟vector很相似。比如想声明一个10个数据的float数组,可以写成Vec2f。

这样就很容易引出一个大家经常使用的数据结构了,Scalar_类,这个类其实就是一个Vec4x的一个变种,大家常用的Scalar其实就是Scalar_<double>。这样一说,大家是不是就很容易理解了,为啥很多函数的参数输入可以是Mat,也可以是Scalar了。其实OpenCV定义的InputMat,outputMat参数格式,以上的这几种数据结构都可以作为参数的。

接下来介绍一个有意思的类Range,大家可能用的不多,对它不熟悉,其实它就是为了使OpenCV的使用更像Matlab而产生的。比如Range::all()其实就是Matlab里的符号:或者...。而Range(a, b)其实就是Matlab中的a:b。有趣吧,注意a,b都需要是int型的哦,亲。

Ptr类我就不太敢介绍了,是智能指针,我也没有用过,文档里说是很类似大名鼎鼎的Boost库里的shared_ptr。希望以后有机会用一下再拿出来分享心得。

最后出场的还是最重量级的Mat,介绍几个比较重要的成员变量flag(就是我之前说过的header里的结构信息,深度信息,通道数),dims是Mat的维数,要求大于等于2,rows和cols参数代表2维矩阵的行数列数(对于更高维的矩阵,这两个参数都是-1),还有个比较常用的参数应该uchar* data,是Mat的数据指针(比较暴力的同学可以直接调用它好了,不推荐),还有个参数refconst,我理解应该就是我上一讲提到的释放内存的时候要判断这个矩阵是否是最后一个被使用的,这个参数应该就是控制跟当前矩阵结构相关的个数的。

opencv新版本的数据结构的更多相关文章

  1. OpenCV(2)-Mat数据结构及访问Mat中像素

    Mat数据结构 一开始OpenCV是基于C语言的,在比较早的教材例如<学习OpenCV>中,讲解的存储图像的数据结构还是IplImage,这样需要手动管理内存.现在存储图像的基本数据结构是 ...

  2. opencv基本的数据结构(转)

    DataType : 将C++数据类型转换为对应的opencv数据类型 enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, ...

  3. opencv的基本数据结构(一)(转)

    从2001年以来,opencv的函数库一直是基于C接口构建的,因此在opencv1.0版本中,一般使用IplImage的C结构体在内存中存储图像,因此,我们在很多较经典的书籍或者开源项目中依然可见Ip ...

  4. opencv的基本数据结构(二)(转)

    转自:原文链接,以下代码.图片.内容有点改动,只为转载不降低博客内容的可阅性,版权归原作者所有. OpenCV中强大的Mat类型大家已经比较熟悉了.这里梳理一些在工程中其他经常用到的几种基本数据类型. ...

  5. OpenCV的基本数据结构

    参考:http://www.cnblogs.com/guoqiaojin/p/3176692.html

  6. Opencv 的数据结构

    opencv的基本数据结构 结构 成员 意义 CvPoint int x,y 图像中的点 CvPoint2D32f float x,y 二维空间中的点 CvPoint3D32f float x,y,z ...

  7. OpenCV学习(2)--基本数据结构

    OpenCV的基本数据结构 CvPoint:表示图像中的点 CvPoint2D32f:二维空间中的点 CvPoint3D32f:三维空间中的点 这些都是结构体,并不是C++语言中的类,所以他们的构造函 ...

  8. opencv 61篇

    (一)--安装配置.第一个程序 标签: imagebuildincludeinputpathcmd 2011-10-21 16:16 41132人阅读 评论(50) 收藏 举报  分类: OpenCV ...

  9. 使用Qt创建第一个OpenCV的Gui应用

    写在前面 学习OpenCV有一些小日子了,发现群里还有很多初学OpenCV的人像我当初一样跌跌撞撞到处找资料,所以在这里把学习笔记分享给大家,希望有志学习OpenCV进行计算机视觉活动的小伙伴们能少走 ...

随机推荐

  1. QQ发送位置(高德地图)

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...

  2. xdebug的安装测试

    1.下载 php -version PHP 7.2.0 (cli) (built: Dec 7 2017 23:07:46) ( NTS DEBUG ) 如果PHP版本是7.2以上的必须要下载Xdeb ...

  3. zoj1967 poj2570 Fiber Network (floyd算法)

    虽然不是最短路,但是询问时任意两点之间的信息都要知道才能回答,由此联想到floyd算法,只要都floyd算法的原理理解清楚了就会发现:这道题的思想和求任意两点之间的最短路的一样的,只不过是更新的信息不 ...

  4. 关于stl advance函数移动步数超过容器大小(越界)的研究

    今天使用advance遇到个问题,当advance移动步数超过容器大小时,表现的结果居然不一样. 再来看下stl源码 template<typename _BidirectionalIterat ...

  5. python使用 db.select 返回的数据只能遍历一次

    python中通过find从mongo中查出的数据,或者通过select返回的数据,其实返回的是游标,当你进行便利一次之后,游标指向最后, 所以当你再一次进行便利时,便出现数据为空的现象. 解决办法: ...

  6. Django ImageField 上传图片并保存到数据库

    转自:http://logic0.blog.163.com/blog/static/188928146201371235435974/ Form代码: class ImageUploadForm(fo ...

  7. ACM学习历程—SNNUOJ1215 矩阵2(二分 && dfs)

    http://219.244.176.199/JudgeOnline/problem.php?id=1215 这是这次微软和百度实习面试的一道题,题目大意就是:有一个n*m的矩阵,已知它每一行都是不严 ...

  8. [转]ubuntu11.04配置nfs--解决mount.nfs: access denied问题

    总算通过了nfs的localhost测试. 配置很简单,下面摘自网络,并且整理下: 1 安装nfs #apt-get install nfs-kernel-server #apt-get instal ...

  9. mysql update不支持子查询更新

    先看示例: SELECT uin,account,password,create_user_uin_tree FROM sys_user 结果: 表中的create_user_uin_tree标识该条 ...

  10. SpringBoot自动化配置之一:SpringBoot内部的一些自动化配置原理

    springboot用来简化Spring框架带来的大量XML配置以及复杂的依赖管理,让开发人员可以更加关注业务逻辑的开发. 比如不使用springboot而使用SpringMVC作为web框架进行开发 ...