C++ 将对象的内容写入C++;

C++ 将对象的内容写入C++;,c++,class,object,opencv,history,C++,Class,Object,Opencv,History,我正在使用OpenCV,我正在计算一些图像的直方图,它包含在一个名为CvHist的类中。我有一个CvHist对象,但我想将其存储在另一个文件中,以便以后使用。我该怎么做 谢谢你1)决定一种文件格式,在字节级别进行规划(如果现有格式合适,则首选) 2) 用您决定的文件格式写出数据。1)决定一种文件格式,在字节级别进行计划(如果现有格式合适,则首选) 2) 以您决定的文件格式写出数据。Boost序列化库非常好。它可以做你想做的事 Boost序列化库非常好。它可以做你想做的事 您可以向名为Serial

我正在使用OpenCV,我正在计算一些图像的直方图,它包含在一个名为CvHist的类中。我有一个CvHist对象,但我想将其存储在另一个文件中,以便以后使用。我该怎么做

谢谢你

1)决定一种文件格式,在字节级别进行规划(如果现有格式合适,则首选)

2) 用您决定的文件格式写出数据。

1)决定一种文件格式,在字节级别进行计划(如果现有格式合适,则首选)


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