OpenCv函数学习(一)
Intel Image Processing Library (IPL)
1 typedef struct _IplImage 2 { 3 int nSize; /* IplImage大小 */ 4 int ID; /* 版本 (=0)*/ 5 int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */ 6 int alphaChannel; /* 被OpenCV忽略 */ 7 int depth; /* 像素的位深度,主要有以下支持格式: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,IPL_DEPTH_16S, IPL_DEPTH_32S, 8 IPL_DEPTH_32F 和IPL_DEPTH_64F */ 9 char colorModel[4]; /* 被OpenCV忽略 */ 10 char channelSeq[4]; /* 同上 */ 11 int dataOrder; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道. cvCreateImage只可以创建交叉存取图像 */ 13 int origin; /*图像原点位置: 0表示顶-左结构,1表示底-左结构 */ 14 int align; /* 图像行排列方式 (4 or 8),在 OpenCV 被忽略,使用 widthStep 代替 */ 15 int width; /* 图像宽像素数 */ 16 int height; /* 图像高像素数*/ 17 struct _IplROI *roi; /* 图像感兴趣区域,当该值非空时,只对该区域进行处理 */ 19 struct _IplImage *maskROI; /* 在 OpenCV中必须为NULL */ 20 void *imageId; /* 同上*/ 21 struct _IplTileInfo *tileInfo; /*同上*/ 22 int imageSize; /* 图像数据大小(在交叉存取格式下ImageSize=image->height*image->widthStep),单位字节*/ 23 char *imageData; /* 指向排列的图像数据 */ 24 int widthStep; /* 排列的图像行大小,以字节为单位 */ 25 int BorderMode[4]; /* 边际结束模式, 在 OpenCV 被忽略*/ 26 int BorderConst[4]; /* 同上 */ 27 char *imageDataOrigin; /* 指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的 */ 28 } IplImage;
位深度
在记录数字图像的颜色时,计算机实际上是用每个像素需要的位深度来表示的。黑白二色的图像是数字图像中最简单的一种,它只有黑、白两种颜色,也就是说它的每个像素只有1位颜色,位深度是1,用2的一次幂来表示;考虑到位深度平均分给R, G, B和Alpha,而只有RGB可以相互组合成颜色。所以4位颜色的图,它的位深度是4,只有2的4次幂种颜色,即16种颜色或16种灰度等级 ) 。8位颜色的图,位深度就是8,用2的8次幂表示,它含有256种颜色 ( 或256种灰度等级 )。24位颜色可称之为真彩色,位深度是24,它能组合成2的24次幂种颜色,即:16777216种颜色 ( 或称千万种颜色 ),超过了人眼能够分辨的颜色数量。当我们用24位来记录颜色时,实际上是以2^(8×3),即红、绿、蓝 ( RGB ) 三基色各以2的8次幂,256种颜色而存在的,三色组合就形成一千六百万种颜色。
CvLoadImage
IplImage* CvLoadImage(const char *cFileName, int flags)
CvLoadImage(cFileName, -1); // 默认读取图像的原通道数
CvLoadImage(cFileName, 0); // 强制转化读取图像为灰度图
CvLoadImage(cFileName, 1); // 读取彩色图
CvCloneImage
IplImage* CvCloneImage(const IplImage *p)
在使用函数之前,不用特地开辟内存,即该函数会自己开一段内存,然后复制好image里面的数据,然后把这段内存中的数据返回.
CreateCvImage
IplImage* cvCreateImage(CvSize size, int depth, int channels)
作用申请一个图片结构大小的内存,比如创建灰色图像
IplImage *pGraycvImage = cvCreateImage(cvGetSize(pSrc_Image), 8, 1);
cvCvtColor(pSrc_Image,pGraycvImage ,CV_BGR2GRAY);