一、IplImage图像与BYTE图像在VC中的声明
1、IplImage* iplImage;
2、BYTE* data;
二、由IplImage*得到BYTE*图像数据
1、data = iplImage->imageDataOrigin; //未对齐的原始图像数据
2、data = iplImage->imageData; //已对齐的图像数据
三、 由BYTE*得到IplImage*图像数据
1、iplImage = cvCreateImageHeader(cvSize(width,height),depth,channels);
2、cvSetData(iplImage,data,step);
首先,由cvCreateImageHeader()创建IplImage图像头,制定图像的尺寸,深度和通道数;
然后,由cvSetData()根据 BYTE*图像数据指针设置IplImage图像头的数据数据,其中step指定该IplImage图像每行占的字节数,对于1通道的 IPL_DEPTH_8U图像,step可以等于width。
释放时候使用cvReleaseImageHeader释放图像头,使用delete释放图像数据。
可以理解为将这个新图像的数据指针指向了一个已存在的图像数据上,不存在图像数据存储空间的分配操作。
注意:由于iplimage每行需要4字节整数倍,所以需要每行后补零。
我自己试验的结果是,cvSetData的参数step为width即可,不用补零,否则出错
。
推测是系统自动补零了。