2015-04-19 17 views
5

Sto usando openCV e ho un oggetto mat 95.1 di tipo CV_32F, che vorrei scrivere su un file binario. Sto usando il codice qui sotto, ma non posso lanciare un 32F su un tipo di carattere. Ci sono dei suggerimenti? Voglio anche eseguire la procedura inversa di lettura di un file binario e la memorizzazione dei valori in un oggetto opaco dello stesso tipo.Scrivi cv :: Mat su file binari?

try{ 
    ofstream posBinary; 
    posBinary.open("C:/Users/Dr.Mollica/Documents/TSR Datasets/signDatabasePublicFramesOnly/posSamps.bin", ios::out | ios::binary); 
    posBinary.write((char *)featureVector, sizeof(featureVector); 
} 
catch (exception X){ cout << "Error! Could not write Binary file" << endl; } 

Inoltre da notare, il motivo che voglio fare in un file binario è sarò scrivere un gran numero di questi vettori per il file che verrà letto in un algoritmo di apprendimento automatico. E dalla mia comprensione leggere e scrivere su un file binario è il modo più veloce possibile.

risposta

5

vi consiglio di utilizzare le API OpenCV scrivere cv::Mat a XML o yml file, che in seguito sarà possibile leggere il cv::Mat indietro da loro facilmente.

Ad esempio:

cv::Mat yourMatData; 

// write Mat to file 
cv::FileStorage fs("file.yml", cv::FileStorage::WRITE); 
fs << "yourMat" << yourMatData; 

// read Mat from file 
cv::FileStorage fs2("file.yml", FileStorage::READ); 
fs2["yourMat"] >> yourMatData; 

Aggiornato: Se si preferisce scrivere/leggerli da/per file binari, è possibile prima convertire cv::Mat a matrice/vettore. E poi scrivi la matrice/vettore sui file.

Per leggere, controllare Convert Mat to Array/Vector in OpenCV.

+0

Dalla mia comprensione, leggere una scrittura utilizzando file binari è più veloce. Avrò un gran numero di questi vettori da alimentare a un algoritmo di apprendimento, quindi mi piacerebbe scriverli e leggerli il più velocemente possibile. – pdm

+1

@pdm Suggerisco anche di usare xml o yml. È vero che l'uso di file binari è più veloce, ma xml o yml è abbastanza veloce per la maggior parte dei casi. Ricordare di non testare la velocità nel debugger di Visual Studio, utilizzando xml o yml per i file di grandi dimensioni nel debugger è MOLTO MOLTO lento. Se pensi che xml o yml sia troppo grande, puoi usare xml.gz o yml.gz e OpenCV comprimerà automaticamente il file. – delphifirst

+0

Grazie, penso che continuerò a utilizzare un file xml o yml ma per riferimento futuro sarebbe possibile fornire un esempio di come ciò potrebbe essere fatto con un file binario. Grazie ancora per le risposte veloci. – pdm