OpenCv 中的IplImge数据与常规数组

来源:互联网 发布:淘宝背景教程 编辑:程序博客网 时间:2024/06/06 12:56

IplImage数据结构

typedef struct _IplImage      {          int  nSize;         /* IplImage大小 */          int  ID;            /* 版本 (=0)*/          int  nChannels;     /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */          int  alphaChannel;         int  depth;                 char colorModel[4];         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];        int  BorderConst[4];        char *imageDataOrigin; /* 指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的 */      }      IplImage;

IplImage数据中的depth代表像素的位深度,有IPL_DEPTH_8U、IPL_DEPTH_8S、IPL_DEPTH_16U、IPL_DEPTH_16S、IPL_DEPTH_32S、IPL_DEPTH_32F、IPL_DEPTH_64F可支持。

IplImage中存在widthStep,表示图像每行数据的位数,可以用其来逐字节的访问数据,并将其写入对应的数组中。

for(row= 0; row < img->height;row++ ){   for ( col = 0; col < img->width; col++ )   {     b[i] = img->imageData[img->widthStep * row + col *3]     g[i] = img->imageData[img->widthStep * row + col *3 + 1];     r[i] = img->imageData[img->widthStep * row + col *3 + 2];
     i++;   }}


阅读全文
0 0
原创粉丝点击