本示例程序主要是通過實例演示高維Mat的尋址方式。

//3,4分別表示行數、列數,所以3*4是一個頁面的元素數,2表示有2個3*4 int a=2,b=3,c=4; int size[]={a,b,c}; float* d1=new float[a*b*c]; for(int i=0;i<a*b*c;i++) d1[i] =(float)i; Mat myND=Mat(3,size,CV_32F,d1); cout<<myND.step[0]<<endl;//等於size中的3*4 cout<<myND.step[1]<<endl;//對應size中的4 cout<<myND.step[2]<<endl;//單個元素的字節數 int rows=myND.step1(0)/myND.step1(1); int cols=myND.step1(1); cout<<"rows="<<rows<<endl; cout<<"cols="<<cols<<endl; for(int z=0;z<a;z++) { cout<<endl<<"the "<<z<<"th plane"; for(int y=0;y<rows;y++) { for(int x=0;x<cols;x++) { if(x%cols==0) cout<<endl; uchar*pa=(myND.data+myND.step[0]*z+myND.step[1]*y+myND.step[2]*x); float*pij=(float*)pa; cout<<*pij<<" "; } } cout<<endl; } return 0; }
上面的程序中,訪問三維矩陣元素是,采用的方法是.data+step[0]*z+myND.step[1]*y+myND.step[2]*x
Mat的成員函數at(z,y,x)方法,也可以遍歷每一個元素:
//3,4分別表示列數、行數,所以3*4是一個頁面的元素數,2表示有2個3*4 int a=2,b=3,c=4; int size[]={a,b,c}; float* d1=new float[a*b*c]; for(int i=0;i<a*b*c;i++) d1[i] =(float)i; Mat myND=Mat(3,size,CV_32F,d1); cout<<myND.step[0]<<endl;//等於size中的3*4 cout<<myND.step[1]<<endl;//對應size中的4 cout<<myND.step[2]<<endl;//單個元素的字節數 int rows=myND.step[0]/myND.step[1]; int cols=myND.step[1]/myND.elemSize(); cout<<"rows="<<rows<<endl; cout<<"cols="<<cols<<endl; for(int z=0;z<a;z++) { cout<<endl<<"the "<<z<<"th plane"; for(int y=0;y<rows;y++) { for(int x=0;x<cols;x++) { if(x%cols==0) cout<<endl; float p=myND.at<float>(z,y,x); cout<<p<<" "; } } cout<<endl; } return 0; }
下面是運行結果與上圖一致。
