我正在使用OpenCV,我正在计算一些图像的直方图,它包含在一个名为CvHist的类中。我有一个CvHist对象,但我想将它存储在以后的另一个文件中使用它。我怎么能这样做?
谢谢
答案 0 :(得分:3)
实际上,在OpenCV中有一种特定的方法可以做到这一点。您可以在XML文件中编写对象,如下所示:
CvFileStorage* storage = cvOpenFileStorage("globalHistogram.xml", 0, CV_STORAGE_WRITE);
cvWrite(storage, "histogram", global_histogram);
并且阅读是这样的:
CvHistogram* global_histogram;
CvFileStorage* storage = cvOpenFileStorage("globalHistogram.xml", 0, CV_STORAGE_READ);
global_histogram = (CvHistogram *)cvReadByName(storage, 0, "histogram" ,0);
答案 1 :(得分:2)
Boost序列化库非常好用。它可能会做你想要的。 http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/index.html
答案 2 :(得分:0)
1)确定文件格式,在字节级别进行规划(如果现有格式合适,则更喜欢)。
2)以您决定的文件格式写出数据。
答案 3 :(得分:0)
您可以向名为Serialise
的类添加方法,类似于以下内容:
CvHist::Serialise( std::string fName, bool read )
{
if ( read )
{
std::ifstream fStream( fName );
// Read in values from file, eg:
fStream >> this->param1;
fStream >> this->param2;
// ...etc
}
else
{
std::ofstream fStream( fName, ios::trunc ); // (ios::trunc clears file)
// Read out values into file, eg:
fStream << this->param1;
fStream << this->param2;
// ...etc
}
}
请注意,顺序很重要 - 从文件中读取各种参数的顺序必须与将参数写入文件的顺序相匹配。还记得#include <fstream>
现在,要创建一个填充了文件CvHist
中数据的data.txt
对象,您只需写下:
CvHist object;
object.Serialise( "data.txt", true );
如果你已经填充了一个对象并希望将它存储在一个文件中,这次,比如bob.dat
,请写下:
// (object has been populated with data previously)
object.Serialise( "bob.dat", false );