輸入輸出XML和YAML檔案
阿新 • • 發佈:2018-11-30
示例程式:XML和YAML檔案的寫入
//----------------輸入輸出XML和YAML檔案------------------------------------ //描述:XML:可擴充套件標識語言----開發者根據自身需要可定義自己的標記。字尾:.yml // TAML:是一個可讀性高,用來表達資料序列的格式。字尾:.yaml // 儲存類為:FileStorage //---------------------------------------------------------------------- //----------------【XML和YAML檔案的寫入】--------------------- // "<<"檔案寫入操作;“>>”檔案讀取操作 //vector(arrays)結構的輸入輸出在第一個元素前加“[”,最後一個元素上加“[” //map結構的操作使用符號“{”和“}” #include <opencv2/opencv.hpp> #include <time.h> using namespace cv; #define _CRT_SECURE_NO_WARNINGS int main() { //初始化 FileStorage fs("test.yaml",FileStorage::WRITE);//檔案開啟 //開始檔案寫入“<<” fs << "frameCount" << 5; time_t rawtime; time(&rawtime); fs << "calibrationDate" << asctime(localtime(&rawtime)); //資料結構的初始化 Mat cameraMatrix = (Mat_<double>(3,3)<<1000,0,320,0,1000,240,0,0,1); Mat distCoeffs = (Mat_<double>(5,1)<<0.1,0.01,-0.001,0,0); //向Mat中寫入資料 fs << "cameraMatrix" <<cameraMatrix<<"distCoffs"<<distCoeffs ; fs << "features" << "[";//開始讀入features文字序列 for (int i = 0; i < 3;i++) { int x = rand() % 640; int y = rand() % 480; uchar lbp = rand() % 256; fs << "{:" << "x" << x << "y" << y << "lbp" << "[:"; for (int j = 0; j < 8; j++) fs << ((lbp >> j ) & 1); fs << "]" << "}"; } fs << "]";//關閉序列 fs.release();//檔案關閉 printf("檔案讀寫完畢,請在工程目錄下檢視生成的檔案~!"); getchar(); return 0; }
執行結果:
在程式設計的過程中出現問題:asctime定義或功能不安全,需要對專案屬性進行配置,新增_CRT_SECURE_NO_WARNINGS點確認後就配置好了。然後執行程式就正常了。
XML和YAML檔案的讀取:
//-----------------【XML和YAML檔案的讀取】--------------------------- #include <opencv2/opencv.hpp> #include <time.h> using namespace cv; using namespace std; int main() { //改變console字型顏色 system("color 6F"); //初始化 FileStorage fs2("test.yaml",FileStorage::READ);//要讀取的檔案 //第一種方法,對FileNode操作 int frameCount = (int)fs2["frameCount"]; std::string date; //第二種方法,使用FileNode運算子>> fs2["calibrationDate"] >> date; Mat cameraMatrix2, distCoeffs2; fs2["cameraMatrix"] >> cameraMatrix2; fs2["distCoeffs"] >> distCoeffs2; cout << "frameCount:" << frameCount << endl << "calibratioin date:"<<date << endl << "camera matrix:" << cameraMatrix2 << endl << "distortion coeffs:" << distCoeffs2 << endl; FileNode features = fs2["features"]; FileNodeIterator it = features.begin(), it_end = features.end(); int idx = 0; std::vector<uchar> lbpval; //使用FileNodeIterator遍歷序列 for (; it != it_end;++it,idx++) { cout << "feature #" << idx << ":"; cout << "x=" << (int)(*it)["x"] << ",y=" << (int)(*it)["y"] << ", lbp: ("; //我們也可以使用filenode>>std::veator操作符來很容易的讀數值陣列 (*it)["lbp"] >> lbpval; for (int i = 0; i < (int)lbpval.size(); i++) cout << " " << (int)lbpval[i]; cout << ")" << endl; } fs2.release(); //程式結束,輸出一些幫助文字 printf("\n檔案讀取完畢,請輸入任意鍵結束程式~!"); getchar(); return 0; }
執行結果: