繁体   English   中英

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

[英]Write the content of an object into a file in C++

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

谢谢

实际上,在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);

Boost序列化库非常不错。 它可能会做您想要的。 http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/index.html

1)确定文件格式,并在字节级别上计划(如果现有格式合适,请首选)。

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

您可以将方法添加到名为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>

现在,要创建一个用数据data.txt数据填充的CvHist对象,您只需编写以下代码:

CvHist object;
object.Serialise( "data.txt", true );

如果您已经填充了一个对象并将其存储在文件中,这一次,例如bob.dat ,请编写以下代码:

// (object has been populated with data previously)
object.Serialise( "bob.dat", false );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM