2015-04-19 20 views
5

Używam openCV i mam obiekt 95,1 mat typu CV_32F, który chciałbym napisać do pliku binarnego. Używam poniższego kodu, ale nie mogę rzucić 32F na typ char. Czy są jakieś sugestie? Chcę również wykonać odwrotną procedurę odczytywania pliku binarnego i zapisywania wartości do obiektu macie tego samego typu.Napisz cv :: Mat do plików binarnych?

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; } 

również zauważyć, powodem chcę zrobić go w pliku binarnym to będę pisać dużą liczbę tych wektorów do pliku, który zostanie odczytany w celu algorytm uczenia maszynowego. Z mojego rozumienia, jak najszybsze jest czytanie i zapisywanie do pliku binarnego.

Odpowiedz

5

polecam użyć API OpenCV napisać cv::Mat do xml lub yml plików, które można później czytają cv::Mat powrotem z nimi łatwo.

Na przykład:

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; 

Aktualizacja: Jeśli wolisz pisać/czytać je do/z plików binarnych, można najpierw przekonwertować cv::Mat do tablicy/wektor. A następnie zapisz tablicę/wektor do plików.

Aby przeczytać, sprawdź Convert Mat to Array/Vector in OpenCV.

+0

Z mojego rozumienia czytanie pisania za pomocą plików binarnych jest szybsze. Zamierzam wprowadzić dużą liczbę tych wektorów do algorytmu uczenia, więc chciałbym napisać i przeczytać je tak szybko, jak to możliwe. – pdm

+1

@pdm Proponuję także użyć xml lub yml. To prawda, że ​​używanie plików binarnych jest szybsze, ale xml lub yml jest wystarczająco szybki dla większości przypadków. Pamiętaj, aby nie testować szybkości w debugerze Visual Studio, użycie xml lub yml dla dużych plików w debugerze jest BARDZO BARDZO wolne. Jeśli uważasz, że xml lub yml jest zbyt duży, możesz użyć xml.gz lub yml.gz, a OpenCV automatycznie skompresuje plik. – delphifirst

+0

Dziękuję Myślę, że będę trzymać się za pomocą pliku xml lub yml, ale dla przyszłego odniesienia będzie można podać przykład, jak można to zrobić z plikiem binarnym. Jeszcze raz dziękuję za szybkie odpowiedzi. – pdm