从std :: vector

时间:2018-05-05 13:07:01

标签: c++ opencv vector copy

如果我想从std :: vector创建一个opencv mat,我使用以下函数:

Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)

vector<double> myData;
cv::Mat m(100, 100, 1, myData.data(), myData.size())

这个构造函数不会复制数据,所以当向量是临时的并且我们返回mat时,mat会有无效数据,所以我返回一个效率低下的克隆。

void doProcessing()
{
  //...
  Mat m = getMat(12.2, 144, ...);
  cout<< m.at<double>(0,0);
  //...
}

Mat getMat(some parameters){
  vector<double> myData;
  //do some processing on parameters and myData
  cv::Mat m(100, 100, 1, myData.data(), myData.size());
  return m.clone();
}

有没有更好的方法?我怎样才能使用std :: move来移动指针? 我不想复制数据,只需在O(1)中移动矢量数据指针。

1 个答案:

答案 0 :(得分:0)

为什么不进行重构,以便getMat返回一个向量,然后在cv::Mat中将向量转换为doProcessing()

void doProcessing()
{
  //...
  vector<double> v = getMat(12.2, 144, ...);

  cv::Mat m(100, 100, 1, myData.data(), myData.size());
  cout<< m.at<double>(0,0);
  //...
}

vector<double> getMat(some parameters){
  vector<double> myData;
  //do some processing on parameters and myData

  return myData;
}