¿Hay alguna manera de guardar los objetos opencv en la base de datos (como oracle, mysql a.s.o) en vez de en el archivo xml?Tienda Opencv a la base de datos
CvSave es como un blackbox.
¿Hay alguna manera de guardar los objetos opencv en la base de datos (como oracle, mysql a.s.o) en vez de en el archivo xml?Tienda Opencv a la base de datos
CvSave es como un blackbox.
Su pregunta es buena. Guardar en XML requiere mucho más espacio en disco y carga más lento. Tuve el problema yo mismo y escribí un código corto que guarda Mat en el disco, Lo cambia para guardar otros objetos.
// 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;
}
Quizás agregue una nota de que su código no maneja los tipos firmados como 'CV_8S' –
Esto no responde la pregunta real, pero es extremadamente útil. – Parmaia
abierto es de código abierto, que tienen el código fuente, no hay una caja negra – Eric
Thx Eric, tienes razón. Quiero decir, tal vez hay una manera más fácil que recompilar opencv. ¿Alguien ya ha tratado con opencv y bases de datos? – Jayka
estoy bastante seguro de que si tienes el archivo xml puedes analizar ese archivo xml y guardarlo en una base de datos. –