IplImage *pImg;
当直接访问pImg并将其转换为int型的时候,原本为255的数据,此时以其补码的形式给出结果,也就是-1。
int val = pImg->imageData[h * widthStep + w];
当使用uchar类型的指针指向pImg中的数据的时候,再通过此指针访问数据时得到的结果为255
uchar *data = pImg->imageData;
int val = data[h * widthStep + w];
所以在访问数据的时候一定要注意,使用uchar类型的指针进行访问。
使用cvCreateImage创建图像内存后,可以使用cvInitImageHeader重新初始化图像的大小,释放图像的时候也不会造成崩溃。
IplImage *img = cvCreateImage(cvSize(1000, 1000), 8, 3);
char* imgdata=img->imageData, *oridata=img->imageDataOrigin;
cvInitImageHeader(img, cvSize(500,500), 8, 3);
cvSetData(img,imgdata,img->widthStep);
img->imageDataOrigin=oridata;
cvReleaseImage(&img);
注意init的时候不能大于原始分配的图像的大小,否则后面使用的时候会崩溃的!图像数据的内存大小时这么计算的
width*height*sizeof(depth)*channel