2015-04-19 165 views
5

我使用openCV,我有一個類型爲CV_32F的95,1 mat對象,我想寫入二進制文件。我使用下面的代碼,但是我不能將32F轉換爲char類型。有什麼建議嗎?我也想執行讀取二進制文件並將這些值存儲到相同類型的mat對象中的相反過程。將cv :: Mat寫入二進制文件?

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

另外需要注意的,我想這樣做的二進制文件的原因是我會寫大量的這些向量組將被讀取到機器學習算法的文件。從我的理解讀取和寫入二進制文件是最快的方式。

回答

5

我建議你使用OpenCV的API編寫cv::MatXMLYML文件,您可以稍後閱讀cv::Mat從他們回來容易。

例如:

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; 

更新時間:如果你喜歡寫/讀給/從二進制文件,你可以先轉換cv::Mat數組/向量。然後將數組/矢量寫入文件。

要繼續閱讀,請查看Convert Mat to Array/Vector in OpenCV

+0

根據我的理解,閱讀使用二進制文件寫作更快。我將有大量這些向量被饋送到學習算法,所以我想盡可能快地寫和讀它們。 – pdm

+1

@pdm我也建議你使用xml或者yml。確實,使用二進制文件更快,但對於大多數情況來說,xml或yml足夠快。請記住不要在Visual Studio調試器中測試速度,在調試器中使用xml或yml作爲大文件非常慢。如果您認爲xml或yml太大,您可以使用xml.gz或yml.gz,而OpenCV會自動壓縮文件。 – delphifirst

+0

謝謝我認爲我會堅持使用xml或yml文件,但爲了將來的參考,有可能舉例說明如何使用二進制文件完成此操作。再次感謝您的快速響應。 – pdm