2017-07-25 2 views
0

Ich möchte eine Matte konvertieren, deren Abmessungen [2000] [256] sind und ich möchte dies in eine vector<vector<mat> > mit Abmessungen [256] [20] [10] [10] konvertieren. In Matlab ist es möglich, reshape(Mat2d, 10, 10, 20, 256); Ich würde das gerne auch hier machen.Wie kann ich eine Matte 2D in Vektor umformen <vector<Mat>>?

+0

afaik es keine offensichtliche Möglichkeit, diese Umbildung zu tun, so dass Sie angeben müssen, wie es (auch bekannt als schreiben Sie den Code von Hand) – user463035818

+0

gut gemacht werden soll, in Matlab ist es möglich, umformen (Mat2d, 10, 10, 20, 256), ich möchte das gleiche tun –

+0

Haben Sie sich Bibliotheken wie Eigen http://eigen.tuxfamily.org/index.php?title = Main_Page, die lineare Algebra abdecken? (insbesondere http://eigen.tuxfamily.org/dox/group__TutorialReshapeSlicing.html) –

Antwort

0

fand ich eine Lösung:

vector<vector<Mat>> 
reshape2D4D(Mat &A, int dim1, int dim2, int dim3, int dim4) 
{ 
    vector<vector<Mat>> B; 
    for (int i = 0; i<dim1; i++) { 
     B.push_back(vector<Mat>()); 
     for (int j = 0; j<dim2; j++) 
      B[i].push_back(Mat(dim3, dim4, CV_64F, Scalar::all(1))); 
    } 
    Mat in = A.reshape(1, 1); 
    Mat subImg; 
    for (int i = 0; i < 256; i++) 
    { 
     for (int j = 0; j < 20; j++) 
     { 
      subImg = in(cv::Range(0, 1), cv::Range(100*j, 100*j + 100)); 
      subImg.reshape(10, 10); 
      B[i][j] = subImg; 
     } 
    } 
    return B; 
} 
Verwandte Themen