【问题标题】:How to create empty Mat in OpenCV?如何在 OpenCV 中创建空垫?
【发布时间】:2015-09-29 00:05:33
【问题描述】:

如何在 OpenCV 中创建空 Mat?创建后我想使用 push_back 方法在 Mat 中推送行。

类似:

Mat M(0,3,CV_32FC1);

或者唯一的选择是:

Mat M;
M.converTo(M,CV_32FC1);

?

【问题讨论】:

    标签: c++ opencv mat


    【解决方案1】:

    从一个空的垫子开始。第一个 push_back 将确定类型和大小。

    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]
    

    【讨论】:

      【解决方案2】:

      您可以简单地使用以下方法创建一个空矩阵:

      Mat m;
      

      如果你已经知道它的类型,你可以这样做:

      Mat1f m; // Empty matrix of float
      

      如果你知道它的大小

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

      你也可以添加默认值

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

      如果您想使用push_back 向空矩阵添加值,您可以按照@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 
      

      如果您需要 push_back 包含在 vector<> 中的数据,您应该注意将值放入矩阵并转置。

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-08
        • 1970-01-01
        相关资源
        最近更新 更多