3

我想使用 opencvcv::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));
}

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

4

2 回答 2

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));
}
于 2016-05-13T03:25:39.547 回答
0

好吧,根据文档

储备做:

该方法为 sz 行保留空间。如果矩阵已经有足够的空间来存储 sz 行,则什么也不会发生。如果矩阵被重新分配,则保留第一个 Mat::rows 行。该方法模拟了 STL 矢量类的相应方法。

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

于 2016-05-12T15:02:25.157 回答