OpenCV基础学习篇(二)
来源:互联网 发布:下载苹果版助赢软件 编辑:程序博客网 时间:2024/05/16 05:36
1.1OpenCV基本数据类型
最简单的数据类型就是Cvpoint结构体,它包含了整型的两个成员x,y。CvPoint2D32f和CvPoint3D32f是它的两个变体类型,它们都是浮点型。前者是指二维空间中的点,包含x,y成员;后者是指三维空间中的点,包含x,y,z三个成员。
CvSize与CvPoint很相似,但它的数据成员是整型的width和height,类似的,如果要用浮点型,则有变体类型CvSize2D32f。它常用来表示图像的尺寸。
CvRect类型派生于CvPoint和CvSize,是一个复合类型。包含x,y,width,height,表示图像的部分区域。
CvScalar类型包含四个整型成员,有一个单独的成员val,它是一个指向4个双精度浮点数数组的指针。
1.2矩阵和图像类型
图像中的每个像素都可一看成一个点,一幅图像在计算机的眼中便是一个矩阵。
首先应明白图像类中的派生关系:CvArr--->CvMat--->IplImage。
1.2.1CvMat矩阵结构
一个用于新建一个二维矩阵的例程具有以下原型:
cvMat* cvCreateMat(int rows,int cols,int type);
矩阵的创建有多种方法,做常见的使用cvCreateMat()。
矩阵数据的存取:一般有三种方法。
1)简单的方法。使用宏CV_MAT_ELEM(),返回提取出的元素的值。
CvMat* mat=cvCreateMat(5,5,CV_32FC1);float element_3_2=CV_MAT_ELEM(*mat,float,3,2);与之类似的有个宏CV_MAT_ELEM_PTR(),但是返回的是这个元素的指针。
2)麻烦的方法。使用cvPtr*D家族:cvPtr1D(),cvPtr2D(),cvPtr3D()···cvPtrND()。可接受CvArr*型的矩 指针参数,紧随其后的参数表示索引的整数值。
3)恰当的方法。很多时候,计算机视觉是一种运算密集型的任务,而使用函数接口往往不是最高效的办法
最好的办法就是定义自己的指针计算并且在矩阵中利用自己的方法。由于数据是按光栅扫描顺序存储的。
通道相互交错,所以对一个多通道矩阵,它们变化的速度仍然比较快。
1.2.2Ipllmage数据结构
它是一个CvMat对象。
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 和IPL_DEPTH_64F */ char colorModel[4]; /* 被OpenCV忽略 */ char channelSeq[4]; /* 同上 */ int dataOrder; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道.只有cvCreateImage可以创建交叉存取图像 */ int origin; /*图像原点位置: 0表示顶-左结构,1表示底-左结构 */ 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;
其中比较重要的参数有,width, height, origin, dataOrder, ROI。
ROI是个很实用的参数。
- OpenCV基础学习篇(二)
- 学习OpenCV(二)
- 学习OpenCV(二)
- OpenCV基础学习篇(一)
- OpenCV学习笔记(二)
- OpenCv学习笔记(二)
- opencv学习笔记(二)
- opencv学习笔记(二)
- OpenCV学习笔记(二)
- opencv学习笔记(二)
- 学习opencv记录(二)
- openCV学习日志(二)
- opencv 学习笔记(二)
- OpenCV学习笔记(二)
- Opencv 基础学习二(对图片进行腐蚀处理、膨胀处理)
- Opencv基础学习二:图片的离散傅里叶变换
- 基础学习(二)
- OpenCV学习笔记__入门篇(二)
- ZOJ(3846)——GCD Reduce
- iOS: 非ARC下返回Block
- 初识DataTable
- 在该做什么的时间去做好一件事情
- 一千万条短信中查找重复
- OpenCV基础学习篇(二)
- TI C6678 DSP与PC Matlab 串口通信研究
- iOS: ARC和非ARC下使用Block属性的问题
- win7系统下python3.4连接mysql数据库
- Nginx+Tomcat+Memcached实现tomcat集群和session共享
- NYOJ 187 快速查找素数
- iOS: 属性声明strong和retain竟然不一样
- (1.1.13)正则表达式30分钟入门
- NoSql中的B-tree、B+tree和LSM-tree