OpenCV学习笔记 -- IplImage数据结构

IplImage数据结构

Typedef struct _IplImage {

int nSize; int ID; int nChannels;//取值可以是1、2、3、4

int alphaChannels; int depth;//深度值参看下表

char colorModel[4];

char channelSeq[4];

int dataOrder;//IPL_DATA_ORDER_PIXEL(指明数据是将像素点不同通道的值交错排在一起(这是常用的交错排列

                         式)),IPL_DATA_ORDER_PLANE(把所有像素同通道值排在一起,形成通道平面,再把平面排列起来)

int origin;//IPL_ORIGIN_TL,IPL_ORIGIN_BL分别表示原点位置在图像左上角或左下角

int align;

int width;

int height;

struct _IplROI* roi;

struct _IplImage* maskROI;

void* imageId;

struct _IplTileInfo* tileInfo;

int imageSize;

char* imageData;//包含一个指向第一行图像数据的指针

int widthStep;//同CvMat中Step,包括相邻行的同列点之间的字节数

int BorderMode[4];

int BorderConst[4];

char* imageDataOrigin; }

注意: depth取值:

OpenCV学习笔记 -- IplImage数据结构_第1张图片

dataOrder取值:实际上OpenCV只支持IPL_DATA_ORDER_PIXEL struct _IplROI* roi; OpenCV学习笔记 -- IplImage数据结构_第2张图片

访问图像数据例:

//最大化HSV图像中的“s”“v”部分

void saturate_sv(IplImage* img)

{

for(int y=0;yheight;y++)

uchar* ptr = (uchar*)(img->imageData+y*img->widthStep);

for(int x=0;xwidth;x++)

{ ptr[x*3+1]=255; ptr[x*3+2]=255;}

}

注意:参照代码//累加一个三通道矩阵中的所有元素。

IplImage和CvMat的重要区别在于imageData。

IplImage中的imageData是uchar*,即字节类型指针。

在图像上进行指针运算时可以简单的增加widthStep(也是以字节为单位),不用关心实际的数据类型。

但是CvMat的data是联合类型,使用时必须说明指针类型data.ptr。

你可能感兴趣的:(数据结构,struct)