step1 openCV Mat各属性简介( 二 )


N维的step(N > 2)
上面分析step是一个[2],实际不是很正确,正确的来说step应该是[dims],dims是Mat的维度,所以对于上面的二维的Mat来说,step是[2]也是正确的 。
下面就对三维的Mat数据布局以及step(维度大于3的就算了吧) 。
上图引用自 搜集资料时发现了这幅图,一切就变的简单了
感谢作者
三维的数据在Mat中是按面来存储的,上图描述的很清晰,这里不再多说 。
上面言道,step是一个[dims],dims是维度 。so,三维的step就是[3] 。其余的不多说了,看图就有了 。下面来创建一个三维的Mat,实际看看
int dims[3] = { 3, 3, 3 };Mat src(3, dims, CV_16SC2, Scalar_(1,2));cout << "step[0]:" << src.step[0] << endl;cout << "step[1]:" << src.step[1] << endl;cout << "step[2]:" << src.step[2] << endl;
首先创建一个3*3*3,depth为的两通道的Mat
step[0]是一个数据面的大小 3 * 3 * (16 / 8 ) * 2 = 36
step[1]是一行数据的大小 3 * (16 / 8 ) * 2 = 12
step[2]是一个元素的大小 2 * (16 / 8) = 4
PS: 三维的Mat 不能使用