OpenCV:widthStep vs step

绪:
在OpenCV中 , widthStep是相对于IplImage*进行图像像素拜候操作的;
而step是相对于Mat进行图像像素拜候操作的;
widthStep:存储一行像素需要的字节数;
step:每一行中所有元素的字节总量 , 单元字节;
本文本家儿要介绍:
widthStep界说;widthStep在IplImage中的感化;widthStep在图像像素拜候中的应用;
widthStep总结;
step在Mat类中的感化;step在图像像素拜候中的应用;

OpenCV:widthStep vs step

文章插图

需要这些哦
OpenCV 2410
方式/
1widthStep界说:
①OpenCV中 , 默认图像原点为图像左上角 , img->origin=IPL_ORIGIN_TL;若是想更改图像原点坐标也可以 , 如img->origin=IPL_ORIGIN_BL , 将图像原点更改为左下角;
一般采用默认的图像原点;
②OpenCV用imread或者cvLoadImage获得的图像数据都是unsigned char类型的;
③IplImage布局体中的widthStep元素大小不一定等于width*nChannels , 
④在cxcore/cxarray.cpp文件中 , cvInitImageHeader对widthStep大小赋值:
image->widthStep =
(((image->width * image->nChannels *(image->depth & ~IPL_DEPTH_SIGN) + 7)/8)+ align - 1) & (~(align - 1));    
此中 , 
cxtypes.h界说IPL_DEPTH_SIGN为:#define IPL_DEPTH_SIGN 0x80000000;
cxmisc.h中界说align为:#define  CV_DEFAULT_IMAGE_ROW_ALIGN 4;
depth取8位深度;
则可计较图像的widthStep;
一些图像的widthStep如下:
IplImage *image_33 = cvCreateImage(cvSize(3, 3), 8, 3);
IplImage *image_31 = cvCreateImage(cvSize(3, 3), 8, 1);
IplImage *image_53 = cvCreateImage(cvSize(5, 3), 8, 3);
IplImage *image_51= cvCreateImage(cvSize(5, 3), 8, 1);
IplImage *image_73 = cvCreateImage(cvSize(7, 3), 8, 3);
IplImage *image_71 = cvCreateImage(cvSize(7, 3), 8, 1);
printf("%d, %d, %d, %d, %d, %d",
image_33->widthStep,
image_31->widthStep,
 image_53->widthStep,
image_51->widthStep,
image_73->widthStep,
image_71->widthStep);
运行成果为:12 ,  4 ,  16 ,  8 ,  24 ,  8 。
是以 , OpenCV分派的内存按4字节对齐 , 与上述计较成果相符 , 如宽度为3、通道数为3的图像 , 每一行需要的现实内存长度为3*3 , 为了内存对齐 , OpenCV会在每行末从头至尾主动补上3个字节的内存 , 内存初始化都为0 , 所以widthStep变为了12 。

OpenCV:widthStep vs step

文章插图

2widthStep在IplImage*中的感化:
如下:
typedef struct _IplImage{
    int  nSize;             /* sizeof(IplImage) */
    int  ID;                /* version (=0)*/
    int  nChannels;         /* Most of OpenCV functions support 1,2,3 or 4 channels */
    int  alphaChannel;      /* Ignored by OpenCV */
    int  depth; /* Pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported.  */

推荐阅读