<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          獨家|OpenCV1.8 使用XML和YAML文件實現(xiàn)文件的輸入/輸出

          共 3370字,需瀏覽 7分鐘

           ·

          2021-08-19 02:40

          翻譯:陳之炎

          校對:李海明


          本文約2400字,建議閱讀5分鐘
          本文為大家介紹了OpenCV使用XML和YAML文件實現(xiàn)的輸入輸出。


          目標


          本小節(jié)將回答以下問題:

          • 如何使用YAML或XML文件打印和讀取文本輸入到文件和OpenCV?

          • 如何對OpenCV數(shù)據(jù)結構做相同的操作?

          • 如何為自定義的數(shù)據(jù)結構做相同的操作?

          • OpenCV中cv::FileStorage , cv::FileNode 和 cv::FileNodeIterator 的數(shù)據(jù)結構和使用方法。


          源代碼


          C ++


          可以在原文下載源代碼,也可以在以下目錄中
          samples/cpp/tutorial_code/core/file_input_output/file_input_output.cpp 找到 OpenCV的源代碼庫。

          這里還有完整的示例代碼。



          代碼詳解


          在這里,只講解XML和YAML文件輸入。你的輸出(及其對應的輸入)只能是具有XML和YAML擴展名的文件,并帶有XML和YAML數(shù)據(jù)結構。這里有兩種可以串行化的數(shù)據(jù)結構:映射(諸如STL映射和Python字典)和元素序列(如STL向量)。二者之間的區(qū)別是,映射中的每一個元素均有唯一的名稱,可以通過該名稱進行訪問。對于序列而言,則需要通過遍歷來查詢一個具體的項目。

          1. 打開和關閉XML / YAML文件。在讀寫文件內容之前,首先需要打開文件,在使用結束時關閉文件。OpenCV中的XML / YAML數(shù)據(jù)結構是CV :: FileStorage。具體來說,該結構可以將文件與硬盤驅動器綁定起來,這樣便可以使用它的構造函數(shù)或open()函數(shù):


          無論是哪一種數(shù)據(jù)結構,它的第二個參數(shù)都是一個常數(shù),可以用來指定操作類型,比如:寫入讀取或追加。文件的擴展名還決定了輸出文件的格式。如果輸出文件的擴展名為*.xml.gz*,甚至能夠輸出壓縮文件。

          當釋放CV :: FileStorage對象之后,該文件將自動關閉。可以通過調用release 函數(shù)顯式地自動關閉文件:
           


          2. 文本和數(shù)字的輸入/輸出。C ++中,數(shù)據(jù)結構使用STL庫中的<<輸出操作符。Python中,則使用了 )。輸出任何類型的數(shù)據(jù)結構,首先需要指定其名稱,在C++中,只需要單純地將名稱推給數(shù)據(jù)流。在Python中,寫函數(shù)的第一個參數(shù)便是名稱。可以用以下命令打印文本和數(shù)字:
           


          讀取是一種簡單的尋址方式(使用 []操作符)、casting操作或使用>>操作符讀出。在Python中,使用real()和getNode()函數(shù)來尋址:
           


          3. OpenCV數(shù)據(jù)結構的輸入/輸出。該操作與基礎C ++和Python的類型完全相同。
           


          4. 向量(數(shù)組)的輸入/輸出和相關映射。正如前文所述,輸出可以是映射和序列(數(shù)組,向量)。同樣,可以先打印變量的名稱,然后指定輸出的序列或映射。

          在序列的第一個元件之前打印“[”字符,在序列的最后一個元素之后打印 “]”字符。在Python語言中,調用 FileStorage.startWriteStruct(structure_name,struct_type) , 其中struct_type為 cv2.FileNode_MAP或cv2.FileNode_SEQ結構,最后調用FileStorage.endWriteStruct()來實現(xiàn)結構:


          同理,對用映射,可以使用“{”和“}”分隔符來代替“[”和]”字符:
           


          在讀操作中,可以使用的和cv::FileNodeIterator兩種數(shù)據(jù)結構。cv::FileStorage 類中的[]操作符(在Python中為 getNode()函數(shù))可以返回一個數(shù)據(jù)類型。如果節(jié)點為序列結構,則可以使用CV :: FileNodeIterator進行迭代。在Python中,可以調用at()函數(shù)訪問序列中的元素,并用size() 函數(shù)返回序列長度:

           
          對于映射,可以使用[]操作符(在Python中為at()函數(shù))來訪問數(shù)據(jù)(也可使用>>操作符):
           


          5. 讀/寫自定義的數(shù)據(jù)結構。假定有一個數(shù)據(jù)結構,如下所示:
           


          在C ++中,通過OpenCV 的XML / YAML I / O接口實現(xiàn)串行化?(僅針對OpenCV的數(shù)據(jù)結構),為自定義的類添加讀取和寫入函數(shù)。在Python中,可以在類的內部一個讀取和寫入函數(shù)來完成類似的操作。內部情況如下:
           


          在C ++中,需要在類的外部添加下列函數(shù)的定義:

           
          如果用戶試圖讀取一個不存在的節(jié)點時,只返回默認初始值。而更為詳細的解決方案則是為對象ID返回一個為-1的值。

          一旦添加了該函數(shù)定義,則這四個函數(shù)便會使用>>操作符寫入和<<操作符讀取(或是Python中的輸入/輸出函數(shù))
           


          或者可以嘗試讀取一個不存在的節(jié)點:
           


          程序運行結果


          在大多情況下,只需要將定義好的數(shù)值打印出來,在顯示屏幕上可以看到以下運行輸出結果:
           


          更加有趣的是:還可以在輸出的XML文件中看到以下結果:
           


          或者在輸出的YAML文件中看到以下結果:
           


          可以在YouTube網(wǎng)站觀看這個示例的運行視頻。
           
          注:本文以C++語言代碼為例,獲取Java和python版本可在原文中查看:

          https://docs.opencv.org/4.5.2/dd/d74/tutorial_file_input_output_with_xml_yml.html


          編輯:于騰凱
          校對:林亦霖

          下一小節(jié):1.9 如何利用OpenCV的parallel_for_并行化代碼

           
          往期回顧:
          獨家|OpenCV?1.1 Mat?- 基本圖像容器(附鏈接)

          獨家|OpenCV 1.2 如何用OpenCV掃描圖像、查找表和測量時間(附鏈接)

          獨家|OpenCV?1.3 矩陣的掩膜操作(附鏈接)

          獨家|OpenCV 1.4 對圖像的操作

          獨家|OpenCV 1.5 利用OpenCV疊加(混合)兩幅圖像
          獨家|OpenCV 1.6 改變圖像的對比度和亮度!
          獨家|OpenCV 1.7 離散傅里葉變換




          譯者簡介





          陳之炎,北京交通大學通信與控制工程專業(yè)畢業(yè),獲得工學碩士學位,歷任長城計算機軟件與系統(tǒng)公司工程師,大唐微電子公司工程師,現(xiàn)任北京吾譯超群科技有限公司技術支持。目前從事智能化翻譯教學系統(tǒng)的運營和維護,在人工智能深度學習和自然語言處理(NLP)方面積累有一定的經驗。業(yè)余時間喜愛翻譯創(chuàng)作,翻譯作品主要有:IEC-ISO 7816、伊拉克石油工程項目、新財稅主義宣言等等,其中中譯英作品“新財稅主義宣言”在GLOBAL TIMES正式發(fā)表。能夠利用業(yè)余時間加入到THU 數(shù)據(jù)派平臺的翻譯志愿者小組,希望能和大家一起交流分享,共同進步

          翻譯組招募信息

          工作內容:需要一顆細致的心,將選取好的外文文章翻譯成流暢的中文。如果你是數(shù)據(jù)科學/統(tǒng)計學/計算機類的留學生,或在海外從事相關工作,或對自己外語水平有信心的朋友歡迎加入翻譯小組。

          你能得到:定期的翻譯培訓提高志愿者的翻譯水平,提高對于數(shù)據(jù)科學前沿的認知,海外的朋友可以和國內技術應用發(fā)展保持聯(lián)系,THU數(shù)據(jù)派產學研的背景為志愿者帶來好的發(fā)展機遇。

          其他福利:來自于名企的數(shù)據(jù)科學工作者,北大清華以及海外等名校學生他們都將成為你在翻譯小組的伙伴。


          點擊文末“閱讀原文”加入數(shù)據(jù)派團隊~



          轉載須知

          如需轉載,請在開篇顯著位置注明作者和出處(轉自:數(shù)據(jù)派ID:DatapiTHU),并在文章結尾放置數(shù)據(jù)派醒目二維碼。有原創(chuàng)標識文章,請發(fā)送【文章名稱-待授權公眾號名稱及ID】至聯(lián)系郵箱,申請白名單授權并按要求編輯。

          發(fā)布后請將鏈接反饋至聯(lián)系郵箱(見下方)。未經許可的轉載以及改編者,我們將依法追究其法律責任。



          點擊“閱讀原文”擁抱組織


          瀏覽 30
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲午夜福利一区二区三区 | 97人妻电影| 久久久久7777 | jiZZJIZZ成熟丰满少妇 | 亚洲色婷婷久久精品AV蜜桃 |