opencv新版本的数据结构

转自 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()返回右下角点坐标。值得注意的是,如果想求两个矩形的交集,并集,可以用如下格式

[cpp] view plain copy

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

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

[cpp] view plain copy

  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,我理解应该就是我上一讲提到的释放内存的时候要判断这个矩阵是否是最后一个被使用的,这个参数应该就是控制跟当前矩阵结构相关的个数的。

时间: 2024-08-26 17:17:35

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

opencv基本的数据结构(转)

DataType : 将C++数据类型转换为对应的opencv数据类型 enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 };// allocates a 30x40 floating-point matrix  // CV_32FMat A(30, 40, DataType<float>::type);Mat B = Mat_<std::complex<double> >

OpenCV基础的数据结构

(1) IplImage

OpenCV—基本数据结构与示例

OpenCV的基本数据结构及示例 OpenCV中强大的Mat类型大家已经比较熟悉了.这里梳理一些在工程中其他经常用到的几种基本数据类型.包括:          Vec          Scalar          Point          Size          Rect          RotatedRect 1. Vec类 1.1 基本概念 Vec是一个模板类,主要用于存储数值向量. 1.2 用法 (1)使用[]访问Vec向量成员 myVector[0]=0; (2)可用它来

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

OpenCV的基本数据结构 CvPoint:表示图像中的点 CvPoint2D32f:二维空间中的点 CvPoint3D32f:三维空间中的点 这些都是结构体,并不是C++语言中的类,所以他们的构造函数就是简单的内联函数. 1 typedef struct CvPoint 2 { 3 int x; 4 int y; 5 } 6 CvPoint; 7 8 9 CV_INLINE CvPoint cvPoint( int x, int y ) 10 { 11 CvPoint p; 12 13 p.x

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

写在前面 学习OpenCV有一些小日子了,发现群里还有很多初学OpenCV的人像我当初一样跌跌撞撞到处找资料,所以在这里把学习笔记分享给大家,希望有志学习OpenCV进行计算机视觉活动的小伙伴们能少走一些弯路. 经过多方面查阅资料,了解到Qt开发平台对OpenCV的支持很好,但是在网上这方面的资料很少,能查到的大部分的图形交互设计都是基于OpenCV2.0之前的数据结构IplImage,而OpenCV现在官方已经更新到2.4.9版本了.偶然发现一本好书最近得到了一本好书< OpenCV 2 Co

OPENCV(5) &mdash;&mdash; 图像直方图

新版本对直方图不再使用之前的histogram的形式,而是用统一的Mat或者MatND的格式来存储直方图,可见新版本Mat数据结构的优势. C++: void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, intdims, const int* histSize, const float** ranges, bool uniform=true, bo

opencv 基本绘图函数

opencv 常用的数据结构和函数 颜色空间转换函数 cvtColor 函数 cvtColor 函数是opencv 中的颜色空间转换函数.可以实现rgb向hsv hsi等颜色空间的转换,也可以转换成灰度图像 原型:void cvtColor (InputArray src,OutArray dst,int code,int dstCn =0);src :输入图像dst:输出图像code:颜色转换空间标示dstCn:目标图像的通道数 若该参数为0 则为目标图像的通道数 cvtColor 函数标识符

OPENCV(3) &mdash;&mdash; 对XML和YAML文件实现I/O 操作

XML\YAML文件在OpenCV中的数据结构为FileStorage string filename = "I.xml"; FileStorage fs(filename, FileStorage::WRITE); \\... fs.open(filename, FileStorage::READ); fs.release();   写入文件使用  <<  运算符 ,读取文件,使用 >> 运算符 fs << "iterationNr&qu

基于 OpenCV 的人脸识别

基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从谷歌街景的图片拼接,到交互艺术展览的技术实现中,都有 OpenCV 的身影. OpenCV 起始于 1999 年 Intel 的一个内部研究项目.从那时起,它的开发就一直很活跃.进化到现在,它已支持如 OpenCL 和 OpenGL 的多种现代技术,也支持如 iOS