理解opencv中的step[]和step()

时间:2021-05-04 16:34:35

这里,为了方便表述,引入两个概念。
1. “合元素”,同一位置所有通道元素的整体
1. “分元素”,某位置一个通道的元素

理解opencv中的step[]和step()

  • step1(i):第i+1维度中分元素的个数
  • step[i]:第i+1维度的大小,单位字节
  • size[i]:第i+1维度元素的个数,单位面数、线数、点数(最后一维的单位是点数)
  • elemSize():每个“合元素”的大小,单位字节
  • elemSize1():每个“分元素”的大小,单位字节

代码如下:

// "合元素",同一位置所有通道元素的整体
// "分元素",某位置一个通道的元素
void Learn_Mat_Definiton()//测试一下step[]的各个维度大小
{

    //////////////////Demo1(3维矩阵)///////////////////////////////////////////
    printf("//////////////////////Demo1(3维矩阵)////////////////////////\n");
    //最后面的两个数:(行,列),确定了一个面
    //是一个依次降维的过程
    //8,10组成了面,5个面,组成了立方体
    int matSize[] = {5,8,10};//每一维元素的个数:8:行,10:列
    Mat mat1(3,matSize, CV_16UC3, Scalar::all(0));

    //求step[i]的大小:每一维的大小(单位字节,每一维度合元素数目*合元素size)
    printf("\n///////step[i]的大小//////////\n");
    printf("step[0]:%d\n",mat1.step[0]);//480:面的大小(第一维)
    printf("step[1]:%d\n",mat1.step[1]);//60:线的大小(第二维)
    printf("step[2]:%d\n",mat1.step[2]);//6:点的大小(第三维)

    //求size[i]:每一维元素的个数(如,第一维度有5个面,第二维度有8条线。。。各维度的单位不同,比如,第一维度的单位是“面”,第二维度的单位是“线”,第三维度的单位是“点”)
    printf("\n///////size[i]的大小///////\n");
    printf("size[0]:%d\n",mat1.size[0]);//5:面
    printf("size[1]:%d\n",mat1.size[1]);//8:线
    printf("size[2]:%d\n",mat1.size[2]);//10:点

    //求step1(i):每一维中“分元素”的个数
    printf("\n///////step1(i)的大小///////\n");
    printf("step1(0):%d\n",mat1.step1(0));//240:面
    printf("step1(1):%d\n",mat1.step1(1));//30:线
    printf("step1(2):%d\n",mat1.step1(2));//3:点

  //step[i]=step1(i)*elemSize1()
  //

    //求elemSize:每个“合元素”的大小(单位字节)
    printf("\n///////elemSize的大小///////\n");
    printf("elemSize:%d\n",mat1.elemSize());//6:

    //求elemSize1:每个“分元素”的大小(单位字节)
    printf("\n///////elemSize1的大小///////\n");
    printf("elemSize1:%d\n",mat1.elemSize1());//2:
}

参考

  1. http://blog.****.net/qianqing13579/article/details/45318279#comments