opencv中的高維矩陣Mat


 本示例程序主要是通過實例演示高維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;
}

下面是運行結果與上圖一致。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM