使用C ++将对象的内容写入文件

时间:2012-03-05 03:05:23

标签: c++ class object opencv history

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

谢谢

4 个答案:

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