Existe-t-il un moyen de sauvegarder les objets opencv dans la base de données (comme oracle, mysql a.s.o) au lieu du fichier xml?Opencv store to database
CvSave est comme une boîte noire.
Existe-t-il un moyen de sauvegarder les objets opencv dans la base de données (comme oracle, mysql a.s.o) au lieu du fichier xml?Opencv store to database
CvSave est comme une boîte noire.
Votre question est une bonne question. L'enregistrement au format XML nécessite beaucoup plus d'espace sur le disque et se charge plus lentement. J'ai moi-même eu le problème et j'ai écrit un code court qui enregistre Mat sur le disque, Vous le modifiez pour enregistrer d'autres objets.
// Save matrix to binary file
int saveMat(const string& filename, const Mat& M){
if (M.empty()){
return 0;
}
ofstream out(filename.c_str(), ios::out|ios::binary);
if (!out)
return 0;
int cols = M.cols;
int rows = M.rows;
int chan = M.channels();
int eSiz = (M.dataend-M.datastart)/(cols*rows*chan);
// Write header
out.write((char*)&cols,sizeof(cols));
out.write((char*)&rows,sizeof(rows));
out.write((char*)&chan,sizeof(chan));
out.write((char*)&eSiz,sizeof(eSiz));
// Write data.
if (M.isContinuous()){
out.write((char *)M.data,cols*rows*chan*eSiz);
}
else{
return 0;
}
out.close();
return 1;
}
/****************************************************************************/
// Read matrix from binary file
int readMat(const string& filename, Mat& M){
ifstream in(filename.c_str(), ios::in|ios::binary);
if (!in){
M = NULL_MATRIX;
return 0;
}
int cols;
int rows;
int chan;
int eSiz;
// Read header
in.read((char*)&cols,sizeof(cols));
in.read((char*)&rows,sizeof(rows));
in.read((char*)&chan,sizeof(chan));
in.read((char*)&eSiz,sizeof(eSiz));
// Determine type of the matrix
int type = 0;
switch (eSiz){
case sizeof(char):
type = CV_8UC(chan);
break;
case sizeof(float):
type = CV_32FC(chan);
break;
case sizeof(double):
type = CV_64FC(chan);
break;
}
// Alocate Matrix.
M = Mat(rows,cols,type,Scalar(1));
// Read data.
if (M.isContinuous()){
in.read((char *)M.data,cols*rows*chan*eSiz);
}
else{
return 0;
}
in.close();
return 1;
}
Peut-être ajouter une note que votre code ne gère pas les types signés comme 'CV_8S' –
Cela ne répond pas à la question réelle, mais est extrêmement utile. – Parmaia
Open est pour l'Open Source, vous avez le code source, il n'y a pas Blackbox – Eric
Thx Eric, vous avez raison. Je voulais dire, il y a peut-être un moyen plus simple que de recompiler opencv. Quelqu'un at-il déjà traité avec opencv et bases de données? – Jayka
Je suis assez sûr que si vous avez le fichier XML, vous pouvez ensuite analyser ce fichier XML et l'enregistrer dans une base de données. –