void junzhi(IplImage* Image , int nBoxSize)
{
//chuli
if( ((int (nBoxSize>>2))<<2) == nBoxSize)
nBoxSize = nBoxSize + 1;
/*****读取灰度值******/
int height,width,step,channels;
unsigned char *data;
int i,j,k;
//均值模块大小33*33
int nOffset = nBoxSize/2; //中心点
int nSize = nBoxSize*nBoxSize;
unsigned long nValue = 0;
/*widthstep是指图像每行所占的字节数,主要要和width区别,
width是指每行所含的像素个数,但是一个像素也可能占一个字节,也可能占三个字节或者四个.
imagedata是指向存储图像像素值数组的指针,内容是这个数组的首地址,
pt.y指的是像素点的行坐标,所以Img->imageData + Img->widthStep*pt.y便是该像素点所在行的首地址,
然后再加上该像素点所在的列,即pt.x,就得到了该像素点的地址,所以你的那句代码也可以写成
((uchar*)(Img1->imageData + Img1->widthStep*pt.y+pt.x)),
都是指该像素点的像素值,至于强制类型转换,是因为会产生一些负值,而像素值是不能为负的.*/
// get the image data
height = Image->height; /* 图像高像素数*/
width = Image->width; /* 图像宽像素数 */
step = Image->widthStep; /* 排列的图像行大小,以字节为单位 */
channels = Image->nChannels; /* 通道数,大多数OPENCV函数支持1,2,3 或 4 个通道 */
data = (uchar *)Image->imageData; /* 指向排列的 图像数据 */
printf("Processing a %dx%d image with %d channels\n",height,width,channels);