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
Post a Comment