OpenCV3編程入門第5章-學習筆記7--輸入輸出XML和YAML文件--詳解代碼示例

      網友投稿 756 2025-04-02

      1.XML和YAML文件簡介

      XML(eXtensible Markup Lauguage)是一種元標記語言,所謂的“元標記”就是開發者可以根據自身需要定義自己的標記。XML是一種語義/結構化語言,它描述了文檔的結構和語義

      YAML(Ain’t a Markup Language)強調這種語言是以數據為中心的。YAML是一種可讀性高,用來表示資料序列的格式

      總之,YAML試圖用一種比XML更敏捷的方式,完成XML所完成的任務

      2.FileStorage 類操作文件的使用引導

      我們一般使用如下過程來寫入或讀取數據到 XML 或 YAML 文件中

      1.實例化一個FileStorage類的對象,用默認帶參數的構造函數完成初始化。或者用FileStorage::open()成員函數輔助初始化

      2.使用流操作<<進行文件寫入操作,或者>>進行文件讀取操作。類似c++中的文件輸入輸出流

      3.使用FileStorage::release()函數折構掉FileStorage類對象,同時關閉文件。

      2.1 【第一步】XML、YAML文件打開

      (1)準備文件寫操作

      FileStorage是OpenCV中XML和YAML文件的存儲類,封裝了所有有關信息

      構造函數為FileStorage::FileStorage ,有兩個重載

      FileStorage::FileStorage()

      FileStorage::FileStorage(const string& source ,int flags,const string& encoding=string)

      實際中如何使用?(xml和yaml文件操作一致,下面使用方法換后綴后即可通用)

      第一種:

      FileStorage fs("abc.xml", FileStorage::WRITE);

      《OpenCV3編程入門》第5章-學習筆記7--輸入輸出XML和YAML文件--詳解代碼示例

      第二種:

      FileStorage fs;

      fs.open("abc.xml", FileStorage::WRITE);

      (2)準備文件讀操作

      第一種:

      FileStorage fs("abc.xml", FileStorage::READ);

      第二種:

      FileStorage fs;

      fs.open("abc.xml", FileStorage::READ);

      2.2?【第二步】進行讀寫操作

      重定向符號: ?<< ? ?>>

      2.3 【第三步】vector(arrays)和maps的輸入輸出

      vector ?使用 ?[ ?]

      maps ?使用 ? { ?}

      fs << "string" <<"[";

      fs <<"imgae1.jpg" <<"abs.jpg";

      fs << "]";

      //

      fs <<"MAP";

      fs <<"{"<<"gg"<<1;

      fs <<"bb"<<2<<"}";

      2.4 【第四步】文件關閉

      fs.release(); ?//顯式關閉文件

      3 ?示例程序:XML和YAML文件的寫入

      #include

      #include

      using namespace cv;

      int main() {

      //初始化

      //FileStorage fs("test.yaml", FileStorage::WRITE);

      FileStorage fs("test.xml", FileStorage::WRITE);

      //開始文件寫入

      fs << "frameCount" << 5;

      time_t rawtime;

      time(&rawtime);

      fs << "calibrationDate" << asctime(localtime(&rawtime));

      Mat cameraMattrix = (Mat_(3, 3) << 1000, 0, 320, 0, 1000, 240, 0, 0, 1);

      Mat distCoeffs = (Mat_(5, 1) << 0.1, 0.01, -0.001, 0, 0);

      fs << "cameraMatrix" << cameraMattrix << "distCoeffs" << distCoeffs;

      fs << "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();

      std::cout << "文件讀寫完畢,請在工程目錄下查看生成的文件!";

      getchar();

      return(0);

      }

      運行結果:

      假如把:

      FileStorage fs("test.xml", FileStorage::WRITE); ?改為 ? FileStorage fs("test.yaml", FileStorage::WRITE);

      4. XML 和 YAML 文件的讀取

      #include

      #include

      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

      << "calibration date:" << date << endl

      <<"camera matrix:"<

      << "distortion coeffs:" << distCoeffs2 << endl;

      FileNode features = fs2["features"];

      FileNodeIterator it = features.begin(), it_end = features.end();

      int idx = 0;

      vector lbpval;

      //使用FileNodeIterator遍歷序列

      for (; it != it_end; ++it, idx++) {

      cout << "feature #" << idx << ":";

      cout << "x=" << (int)(*it)["x"] << ",y=" << (int)(*it)["y"] << ",lbp:(";

      //我們也可以使用filenode>>std::vector操作符來很容易的讀取陣列

      (*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);

      }

      工程目錄準備:

      運行結果:

      OpenCV XML

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:統計報表催報效果顯著(年報催報工作總結)
      下一篇:AR工業應用-一文讀懂為何現代制造業急需數字孿生和AR遠程協助?(二)
      相關文章
      亚洲精品视频久久久| 亚洲1区2区3区精华液| 亚洲成A人片在线观看中文| 亚洲国产品综合人成综合网站| 久久久亚洲精品国产| 亚洲国产成人片在线观看| 国产亚洲美女精品久久| MM1313亚洲国产精品| www亚洲精品久久久乳| 色天使亚洲综合一区二区| 国产精品亚洲一区二区三区在线观看| 亚洲精品久久无码| 亚洲高清一区二区三区电影| 亚洲狠狠婷婷综合久久| 亚洲αⅴ无码乱码在线观看性色| 亚洲精品成a人在线观看☆| 亚洲av成人无码网站…| 国产精品亚洲片在线花蝴蝶| 亚洲成A人片在线观看中文| 亚洲国产综合精品中文字幕 | 久久综合亚洲色hezyo| 亚洲s码欧洲m码吹潮| 亚洲.国产.欧美一区二区三区| 亚洲第一成年免费网站| 亚洲av无码专区国产不乱码| 亚洲AV无码成人网站在线观看| 小说区亚洲自拍另类| 亚洲精品视频久久久| 国产L精品国产亚洲区久久 | 国产亚洲精品国产福利在线观看| 亚洲AV永久无码精品一区二区国产| 亚洲精品成a人在线观看| 亚洲一区二区女搞男| 久久久久久亚洲精品| 亚洲沟沟美女亚洲沟沟| 亚洲 日韩经典 中文字幕| 国产精品亚洲AV三区| 国产AV无码专区亚洲AV漫画| 亚洲av不卡一区二区三区| 亚洲导航深夜福利| 亚洲欧洲国产综合AV无码久久|