如何使用opencv Mat保留?用push_back

时间:2016-05-12 14:43:58

标签: c++ opencv opencv-mat

我想使用opencv cv::Mat函数push_back向矩阵添加新行,但我想预先调整矩阵的大小,以便不需要不断地重新分配数据。 cv::mat::reserve函数有多个行参数,但这意味着您必须指定列数(首先是数据大小)。所以我假设下面的代码会在开头给我一个我不想要的空行。是否有正确的方法使用reservepush_back ??

执行此操作
cv::Mat M(1, size_cols, CV_32FC1);
M.reserve(size_rows);
for (int i = 0; i < size_rows; i++)
{
  GetInputMatrix(A);
  M.push_back(A.row(i));
}

注意:虽然示例代码没有显示,但我不确定最终矩阵的确切大小,但我可以获得最大值保留。

2 个答案:

答案 0 :(得分:2)

在开头使用空垫会很好。列号和类型将通过第一个push_back确定。

cv::Mat M;  // empty mat in the beginning
M.reserve(size_rows);
for (int i = 0; i < size_rows; i++) {
    GetInputMatrix(A);
    M.push_back(A.row(i));
}

答案 1 :(得分:0)

嗯,根据documentation

储备确实:

  

该方法为sz行保留空间。如果矩阵已经有足够的空间来存储sz行,则没有任何反应。如果重新分配矩阵,则保留第一个Mat :: rows行。该方法模拟STL向量类的相应方法。

话虽如此,只要您不存储大量数据,就不会发生任何事情。