我想使用opencv cv::Mat
函数push_back
向矩阵添加新行,但我想预先调整矩阵的大小,以便不需要不断地重新分配数据。 cv::mat::reserve
函数有多个行参数,但这意味着您必须指定列数(首先是数据大小)。所以我假设下面的代码会在开头给我一个我不想要的空行。是否有正确的方法使用reserve
和push_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));
}
注意:虽然示例代码没有显示,但我不确定最终矩阵的确切大小,但我可以获得最大值保留。
答案 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向量类的相应方法。
话虽如此,只要您不存储大量数据,就不会发生任何事情。