Opencv学习笔记(二):Opencv中的基本数据类型与数据结构
2013-12-09 20:11
489 查看
Opencv中的基本数据类型与数据结构
Last Edit 2013/12/9
1.矩阵数据类型与图像数据类型
矩阵数据类型:相当于C语言中一个二维数据中的数据类型,比如int,float,char等。在Opencv中,矩阵的数据类型 有:(S:带符号整数,U:不带符号整数;F:浮点数)
CV_8UC1: 8位无符号型的单通道矩阵;
CV_32FC2: 32位浮点型双通道矩阵;
....
这个矩阵数据类型一般会在,分配矩阵的函数中使用:CvMat *cvCreateMat(int rows,int cols,int type),其中这个type就是上面矩阵数据类型;
图像数据类型:通用的形式为:IPL_DEPTH_<8,32,64>(S|U|F),这个IPL是Intel Image Processing Library的简写;
IPL_DEPTH_8U; 8位无符号整数;
IPL_DEPTH_32F: 32位的浮点数;
2.常用数据结构
1)CvPoint: 只能用于定义整形的点
2)CvPoint2D32f: 二维浮点形的点
3)CvPoint3D32f: 三维浮点形的点
4)CvSize:以像素为单位定义的矩形框大小,但没指明这个矩形框中图像中的位置
5)CRect:定义矩形框的偏移和大小,注意与上面的CSize做区分
6)CvScalar:可存放1~4个数值的数组
7)CvMat :多通道矩阵
8)IplImage:图像结构,包含图像的信息:大小,通道数,像素深度,排列图像的行大小
9)CvArr:这是一个图像结构的通用类型,主要用于函数的参数中,表示函数可以用来接受不同的图像数据
Last Edit 2013/12/9
1.矩阵数据类型与图像数据类型
矩阵数据类型:相当于C语言中一个二维数据中的数据类型,比如int,float,char等。在Opencv中,矩阵的数据类型 有:(S:带符号整数,U:不带符号整数;F:浮点数)
CV_8UC1: 8位无符号型的单通道矩阵;
CV_32FC2: 32位浮点型双通道矩阵;
....
这个矩阵数据类型一般会在,分配矩阵的函数中使用:CvMat *cvCreateMat(int rows,int cols,int type),其中这个type就是上面矩阵数据类型;
图像数据类型:通用的形式为:IPL_DEPTH_<8,32,64>(S|U|F),这个IPL是Intel Image Processing Library的简写;
IPL_DEPTH_8U; 8位无符号整数;
IPL_DEPTH_32F: 32位的浮点数;
2.常用数据结构
1)CvPoint: 只能用于定义整形的点
CvPoint 二维坐标系下的点,类型为整型 typedef struct CvPoint { int x; /* X坐标, 通常以0为基点 */ int y; /* y坐标, 通常以0为基点 */ } CvPoint; /* 构造函数 */ inline CvPoint cvPoint( int x, int y ); /* 从 CvPoint2D32f类型转换得来 */ inline CvPoint cvPointFrom32f( CvPoint2D32f point )注意区分,CvPoint ,cvPoint,一个是数据类型,一个构造函数。
2)CvPoint2D32f: 二维浮点形的点
CvPoint2D32f 二维坐标下的点,类型为浮点 typedef struct CvPoint2D32f { float x; /* X坐标, 通常以0为基点*/ float y; /* Y坐标, 通常以0为基点*/ } CvPoint2D32f; /* 构造函数 */ inline CvPoint2D32f cvPoint2D32f( double x, double y ); /* 从CvPoint转换来 */ inline CvPoint2D32f cvPointTo32f( CvPoint point );
3)CvPoint3D32f: 三维浮点形的点
typedef struct CvPoint3D32f { float x; /* x-坐标, 通常基于0 */ float y; /* y-坐标, 通常基于0 */ float z; /* z-坐标, 通常基于0 */ } CvPoint3D32f; /* 构造函数 */ inline CvPoint3D32f cvPoint3D32f( double x, double y, double z );
4)CvSize:以像素为单位定义的矩形框大小,但没指明这个矩形框中图像中的位置
typedef struct CvSize { int width; /* 矩形宽 */ int height; /* 矩形高 */ } CvSize; /* 构造函数 */ inline CvSize cvSize( int width, int height );
5)CRect:定义矩形框的偏移和大小,注意与上面的CSize做区分
typedef struct CvRect { int x; /* 方形的最左角的x-坐标 */ int y; /* 方形的最上或者最下角的y-坐标 */ int width; /* 宽 */ int height; /* 高 */ } CvRect; /* 构造函数*/ inline CvRect cvRect( int x, int y, int width, int height );
6)CvScalar:可存放1~4个数值的数组
typedef struct CvScalar { double val[4] } CvScalar; /* 构造函数:用val0初始化val[0]用val1初始化val[1], 以此类推*/ inline CvScalar cvScalar( double val0, double val1=0,double val2=0, double val3=0 ); /* 构造函数:用val0123初始化所有val[0]...val[3] */ inline CvScalar cvScalarAll( double val0123 ); /* 构造函数:用val0初始化val[0],用0初始化val[1],val[2],val[3] */ inline CvScalar cvRealScalar( double val0 );
7)CvMat :多通道矩阵
typedef struct CvMat { int type; /* CvMat 标识 (CV_MAT_MAGIC_VAL), 元素类型和标记 */ int step; /* 以字节为单位的行数据长度*/ int* refcount; /* 数据引用计数 */ union { uchar* ptr; short* s; int* i; float* fl; double* db; } data; /* data 指针 */ 矩阵中数据的类型 #ifdef __cplusplus union { int rows; int height; }; union { int cols; int width; }; #else int rows; /* 行数 */ int cols; /* 列数*/ #endif } CvMat;
8)IplImage:图像结构,包含图像的信息:大小,通道数,像素深度,排列图像的行大小
typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; /* 版本 (=0)*/ int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */ int alphaChannel; /* 被OpenCV忽略 */ int depth; /* 像素的位深度: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U, IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F 可支持 */ char colorModel[4]; /* 被OpenCV忽略 */ char channelSeq[4]; /* 同上 */ int dataOrder; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道. cvCreateImage 只能创建交叉存取图像 */ int origin; /* 0 - 顶—左结构, 1 - 底—左结构 (Windows bitmaps 风格) */ int align; /* 图像行排列 (4 or 8). OpenCV 忽略它,使用 widthStep 代替 */ int width; /* 图像宽像素数 */ int height; /* 图像高像素数*/ struct _IplROI *roi;/* 图像感兴趣区域. 当该值非空只对该区域进行处理 */ struct _IplImage *maskROI; /* 在 OpenCV中必须置NULL */ void *imageId; /* 同上*/ struct _IplTileInfo *tileInfo; /*同上*/ int imageSize; /* 图像数据大小(在交叉存取格式下imageSize=image->height*image->widthStep),单位字节*/ char *imageData; /* 指向排列的图像数据 */ int widthStep; /* 排列的图像行大小,以字节为单位 */ int BorderMode[4]; /* 边际结束模式, 被OpenCV忽略 */ int BorderConst[4]; /* 同上 */ char *imageDataOrigin; /* 指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的 */ } IplImage;
9)CvArr:这是一个图像结构的通用类型,主要用于函数的参数中,表示函数可以用来接受不同的图像数据
相关文章推荐
- OpenCv学习笔记(三)---OpenCv中基本数据类型--Point,Size,Rect,Scalar,Vec3b类类型的详细解释及其OpenCv中源代码的详细分析
- 【OpenCV】基本数据类型、IplImage数据结构
- openCV中基本数据类型及其空间范围和大小
- 《coredump问题原理探究》Linux x86版5.5节C风格数据结构内存布局之基本数据类型构成的结构体
- opencv学习笔记[9]:Opencv的基本数据类型和矩阵结构
- opencv学习笔记[9]:Opencv的基本数据类型和矩阵结构
- OpenCV基本数据类型
- OpenCV学习笔记 -- 基本数据类型
- OpenCV基本数据类型
- opencv_基本数据结构的数据保存
- 计算机视觉与图像处理学习笔记(三)opencv的基本数据类型与简单图像处理函数
- OpenCv (正式篇)6----core组件--Mat(最基本的图像数据类型)
- opencv学习-2-0初探-基本类型数据
- Java千百问_06数据结构(023)_基本数据类型在内存中如何存放
- 7.python数据结构-基本数据类型
- Java千百问_06数据结构(006)_java基本数据类型如何转换
- opencv学习-2-0初探-基本类型数据
- opencv学习笔记(三)基本数据类型
- OpenCV 学习笔记---基本数据类型
- opencv-----基本数据类型