【问题标题】:how to use opencv Mat reserve? with push_back如何使用 opencv Mat 储备?与 push_back
【发布时间】:2016-09-08 11:43:19
【问题描述】:

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

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

【问题讨论】:

    标签: c++ opencv opencv-mat


    【解决方案1】:

    在开始时使用空垫就可以了。列号和类型将通过第一个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));
    }
    

    【讨论】:

    • 谢谢,我希望这确实提前预留了空间。我有点怀疑。
    【解决方案2】:

    嗯,根据documentation

    保留:

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

    话虽如此,只要您不存储大量数据,什么都不会发生。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 2017-01-07
      • 2013-02-24
      • 2012-09-20
      相关资源
      最近更新 更多