How to create empty Mat in OpenCV?

后端 未结 2 1959
孤独总比滥情好
孤独总比滥情好 2021-01-02 02:39

How to create empty Mat in OpenCV? After creation I want to use push_back method to push rows in Mat.

Something like:

Mat M(0,3,CV_32FC1);

相关标签:
2条回答
  • 2021-01-02 03:21

    just start with an empty Mat. the 1st push_back will determine type and size.

    Mat big;
    big.push_back(Mat(1,5,CV_64F,3.5));
    big.push_back(Mat(1,5,CV_64F,9.1));
    big.push_back(Mat(1,5,CV_64F,2.7));
    
    [3.5, 3.5, 3.5, 3.5, 3.5;
     9.1, 9.1, 9.1, 9.1, 9.1;
     2.7, 2.7, 2.7, 2.7, 2.7]
    
    0 讨论(0)
  • 2021-01-02 03:27

    You can create an empty matrix simply using:

    Mat m;
    

    If you already know its type, you can do:

    Mat1f m; // Empty matrix of float
    

    If you know its size:

    Mat1f m(rows, cols);  // rows, cols are int
    or 
    Mat1f m(size);  // size is cv::Size
    

    And you can also add the default value:

    Mat1f m(2, 3, 4.1f);
    //
    // 4.1 4.1 4.1
    // 4.1 4.1 4.1
    

    If you want to add values to an empty matrix with push_back, you can do as already suggested by @berak:

    Mat1f m;
    m.push_back(Mat1f(1, 3, 3.5f));   // The  first push back defines type and width of the matrix
    m.push_back(Mat1f(1, 3, 9.1f));
    m.push_back(Mat1f(1, 3, 2.7f));
    
    // m
    // 3.5 3.5 3.5
    // 9.1 9.1 9.1
    // 2.7 2.7 2.7 
    

    If you need to push_back data contained in vector<>, you should take care to put values in a matrix and transpose it.

    vector<float> v1 = {1.1f, 2.2f, 3.3f, 4.4f, 5.5f};
    vector<float> v2 = {1.2f, 2.3f, 3.4f, 4.5f, 5.6f};
    
    Mat1f m1(Mat1f(v1).t());
    Mat1f m2(Mat1f(v2).t());
    
    Mat1f m;
    m.push_back(m1);
    m.push_back(m2);
    
    // m
    // 1.1 2.2 3.3 4.4 5.5
    // 1.2 2.3 3.4 4.5 5.6
    
    0 讨论(0)
提交回复
热议问题