zoukankan      html  css  js  c++  java
  • 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;
    }

    下面是运行结果与上图一致。

  • 相关阅读:
    第十二周作业
    第十一周作业
    第十一次上机作业
    第十次上机作业
    第九周上机作业
    第八周作业
    第八次上机练习
    第七周作业
    第八周
    第六周作业
  • 原文地址:https://www.cnblogs.com/phoenixdsg/p/6908029.html
Copyright © 2011-2022 走看看