OpenCV中的width与widthStep

2022-09-02 10:32:33 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

1.在opencv中width表示的是图像的每行像素数,widthstep表示的是存储一行像素需要的字节数,位了快速读取数据,在opencv中一般使widthStep为4的倍数,从而实现字节的对齐,有利于提高运算速度。

2.函数的原型为

代码语言:javascript复制
image->widthStep = (((image->width * image->nChannels *(image->depth & ~IPL_DEPTH_SIGN)   7)/8)  align - 1) & (~(align - 1));  
代码语言:javascript复制
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读取图片数据的mat形式存储格式

所以widthstep=width*channel(必须为4的倍数)

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/138964.html原文链接:https://javaforall.cn

0 人点赞