Записать содержимое объекта в файл на C ++ - PullRequest
0 голосов
/ 05 марта 2012

Я использую OpenCV и вычисляю гистограмму некоторых изображений, которая содержится внутри класса с именем CvHist. У меня есть объект CvHist, но я хочу сохранить его для последующего использования в другом файле. Как я могу это сделать?

Спасибо

Ответы [ 4 ]

3 голосов
/ 06 марта 2012

На самом деле, в 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);
2 голосов
/ 05 марта 2012

Библиотека Boost Serialization довольно хороша. Это может делать то, что вы хотите. http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/index.html

0 голосов
/ 05 марта 2012

Вы можете добавить метод к классу с именем 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 );
0 голосов
/ 05 марта 2012

1) Определите формат файла, спланируйте его на уровне байтов (если подходящий формат подходит, предпочтите его).

2) Запишите данные в формате файла, который вы выбрали.

...