我使用的是OpenCV,我計算一些圖像的直方圖,該圖像包含在名爲CvHist的類中。我有一個CvHist對象,但我想存儲它以便在以後的另一個文件中使用它。我怎樣才能做到這一點?將對象的內容寫入C++中的文件中
謝謝
我使用的是OpenCV,我計算一些圖像的直方圖,該圖像包含在名爲CvHist的類中。我有一個CvHist對象,但我想存儲它以便在以後的另一個文件中使用它。我怎樣才能做到這一點?將對象的內容寫入C++中的文件中
謝謝
事實上,在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
你可以沿着以下的行添加一個方法叫做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);