使用Method处理cv :: Mat的向量

时间:2014-08-12 09:11:58

标签: opencv pointers vector pass-by-reference

我想给一个方法一个向量来填充不同数量的Mat对象,如下所示:

int main()
{
  vector<cv::Mat> areas;
  doSomething(areas);
  return 0;
}

doSomething(vector<cv::Mat> &areas)
{
  cv::Mat first = zeros(...
  cv::Mat second = ....
  cv::Mat third = ... 
  areas.push_back(first);
  areas.push_back(second);
  areas.push_back(third);
}

当然这不起作用,因为在开始时没有分配足够的内存而内存只在堆栈上!

我的第二个想法是指点:

int main()
{
  vector<cv::Mat> *areas = new vector<cv::Mat>();
  doSomething(&areas);
  return 0;
}

doSomething(vector<cv::Mat> *areas)
{
  cv::Mat first = zeros(...
  cv::Mat second = ....
  cv::Mat third = ... 
  areas->push_back(first);
  areas->push_back(second);
  areas->push_back(third);
}

但问题是,我一开始并不知道要分配多少空间。

第三个想法是以“正常”方式返回向量:

int main()
{
  vector<cv::Mat> areas;
  areas = doSomething();
  return 0;
}

vector<cv::Mat> doSomething()
{
  vector<cv::Mat> areas;
  cv::Mat first = zeros(...
  cv::Mat second = ....
  cv::Mat third = ... 
  areas->push_back(first);
  areas->push_back(second);
  areas->push_back(third);
  return areas;
}

在这种情况下,当然只复制了矢量的标题,而不是矢量中的Mat Objects

你知道我怎么能解决这个问题吗?

提前致谢!

0 个答案:

没有答案