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中也隐含的使用了这种结构。
联系客服