C++ 将对象的内容写入C++;
我正在使用OpenCV,我正在计算一些图像的直方图,它包含在一个名为CvHist的类中。我有一个CvHist对象,但我想将其存储在另一个文件中,以便以后使用。我该怎么做 谢谢你1)决定一种文件格式,在字节级别进行规划(如果现有格式合适,则首选) 2) 用您决定的文件格式写出数据。1)决定一种文件格式,在字节级别进行计划(如果现有格式合适,则首选)C++ 将对象的内容写入C++;,c++,class,object,opencv,history,C++,Class,Object,Opencv,History,我正在使用OpenCV,我正在计算一些图像的直方图,它包含在一个名为CvHist的类中。我有一个CvHist对象,但我想将其存储在另一个文件中,以便以后使用。我该怎么做 谢谢你1)决定一种文件格式,在字节级别进行规划(如果现有格式合适,则首选) 2) 用您决定的文件格式写出数据。1)决定一种文件格式,在字节级别进行计划(如果现有格式合适,则首选) 2) 以您决定的文件格式写出数据。Boost序列化库非常好。它可以做你想做的事 Boost序列化库非常好。它可以做你想做的事 您可以向名为Serial
2) 以您决定的文件格式写出数据。Boost序列化库非常好。它可以做你想做的事 Boost序列化库非常好。它可以做你想做的事 您可以向名为
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
}
}
如果您已经填充了一个对象并希望将其存储在一个文件中,那么这一次,比如说,bob.dat
,请编写以下内容:
CvHist object;
object.Serialise( "data.txt", true );
// (object has been populated with data previously)
object.Serialise( "bob.dat", false );
您可以向名为
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
}
}
如果您已经填充了一个对象并希望将其存储在一个文件中,那么这一次,比如说,bob.dat
,请编写以下内容:
CvHist object;
object.Serialise( "data.txt", true );
// (object has been populated with data previously)
object.Serialise( "bob.dat", false );
实际上,在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);
实际上,在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);