c++ - Pushing one cv::Mat into another is going to copy it? -


i have std::vector<cv::mat> descriptors descriptor[i] descriptors matrix of i-th image of dataset.

if i'm going do:

cv::mat descriptorsmat; for(const auto mat : descriptors)     descriptorsmat.push_back(mat); 

is going copy mat @ end of descriptorsmat (which inefficient both in time , memory) or going add reference of mat @ end of descriptorsmat (which efficient, considered unsafe)?

why need this: since i'm going train vlgmm vlfeat these descriptors matrix, need load data inside float *. once obtain descriptorsmat, i'm going do:

if(!descriptorsmat.iscontinous()){     std::err<<"descriptor matrix not continuous!"<<std::endl;     return 1; } float *data = new float[descriptorsmat.total()]; std::memcpy(data,descriptorsmat.data,descriptorsmat.total() * sizeof(float)); 

if have better alternative solution, please post it!

this code copy mat object kind of header or smart pointer actual data elements.

cv::mat descriptorsmat;  for(const auto mat : descriptors)       descriptorsmat.push_back(mat); 

it copying mat object not data. mat object similar smart pointer, it's reference counting data references. deep copy mat data have call mat.clone or mat.copyto


Comments