opencv widthstep 理解

widthstep是指图像每行所占的字节数,

定义:

image->widthStep = (((image->width * image->nChannels *(image->depth & ~IPL_DEPTH_SIGN) + 7)/8)+ align - 1) & (~(align - 1)); 

图像宽度    图像通道数    计算得到的widthStep

3         3           12

3        1           4

5        3           16

5         1           8

7        3           24

7        1           8

4        3           12

4        1           4


主要要和width区别,width是指每行所含的像素个数,但是一个像素也可能占一个字节,也可能占三个字节或者四个,多个等

.imagedata是指向存储图像像素值数组的指针,内容是这个数组的首地址,pt.y指的是像素点的行坐标,所以Img->imageData + Img->widthStep*pt.y便是该像素点所在行的首地址,然后再加上该像素点所在的列,即pt.x,就得到了该像素点的地址,所以代码也可以写成

((uchar*)(Img->imageData + Img->widthStep*pt.y+pt.x)),都是指该像素点的像素值,至于强制类型转换,是因为会产生一些负值,而像素值是不能为负的.

你可能感兴趣的:(openCV)