您的位置:首页 > 理论基础 > 数据结构算法

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

2012-02-14 17:06 429 查看
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取值:



dataOrder取值:实际上OpenCV只支持IPL_DATA_ORDER_PIXEL struct _IplROI* roi;


访问图像数据例:

//最大化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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: