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