Ich habe eine wo descriptor[i]
ist die Deskriptoren-Matrix der i-th
Bild meines Datensatzes.Eine cv :: Mat in eine andere zu schieben wird es kopieren?
Wenn ich werde tun:
cv::Mat descriptorsMat;
for(const auto mat : descriptors)
descriptorsMat.push_back(mat);
ist esmat
am Ende descriptorsMat
-Kopie gehen (was sowohl zeitlich als auch Speicher ineffizient ist) oder ist es ein hinzufügen gehen Referenz von mat
am Ende von descriptorsMat
(was ist effizient, könnte aber als unsicher angesehen werden)?
WARUM Ich brauche diese: da ich ein VlGMM
von VLFeat mit diesen Deskriptoren Matrix ausbilden werde, brauche ich in einem float *
alle Daten zu laden. Also, wenn ich descriptorsMat
erhalten, werde ich tun:
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));
Wenn Sie irgendwelche bessere Alternative Lösung, bitte per Post!
Es wird eine Kopie, ja. –
Dies ist eine schlechte Nachricht. Ich denke, dass die einzige Lösung ist dann sorgfältig "std :: memcopy" auf "Daten" für jedes Element in "Deskriptoren" verketten – justHelloWorld
'std :: memcpy' ist nicht besser als eine Memberwise-Kopie. –