关于IplImage中的imageData

imageData指向存储图像数据的一块数据区。这块数据区虽然是被声明为char类型的,但是其也可以引用其他类型的数据。

例如声明一个图像,长宽为100,100,深度为32位的float型,灰度图像。

IplImage* Img = cvCreateImage(cvSize(100,100), IPL_DEPTH_32F, 1);

那么我们可以通过调试查看实际的内存分配空间为40000 = 100*100*(32/8)。也就是说实际上是分配了10000个float型的内存区域。其他类型的类似。如何使用呢?

建议使用宏:CV_IMAGE_ELEM(Img, type, row, col),

如  CV_IMAGE_ELEM(Img, float, 0, 0) = 1.024f;

float r = CV_IMAGE_ELEM(Img, float, 0, 0);

类似的CvMat中的data数据的声明形式更好一些,明显的union声明。实际上IplImage中也隐含的使用了这种结构。

你可能感兴趣的:(image,存储,float)