2015-04-19 122 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