opencv源碼解析之(5):CommandLineParser類的簡單理解

     好像在opencv的c版本中,應該是opencv1.0以前,還沒有出現CommandLineParser這個類,最近看到opencv2.3後面的版本里自帶的samples,很多都用到了CommandLineParser

  這個類,那麼這個類到底有什麼作用呢,從命名大概可以猜出這是個命令行解析類。因爲我們知道opencv是一個開源庫,所以其很少有圖形操作方面的api,基本上還是基於命令行執行的。那麼這個類的出現主要是方便用戶在命令行使用過程中減少工作量,暫時只能理解到這一點好處,也不知道說錯了沒有。

  比如說看下samples中的一個類中,main函數前定義了一個keys指針

  const char* keys =

  {

         "{c |camera   |false    | use camera or not}"

         "{fn|file_name     |PetsD1TeC1.avi  | movie file}"

  };

 

  在main函數中使用了下面幾句:

 

   CommandLineParser parser(argc, argv, keys);

       bool useCamera = parser.get<bool>("camera");

       string file = parser.get<string>("file_name");

       VideoCapture cap;

       bool update_bg_model = true;

 

       if( useCamera )

              cap.open(0);

       else

              cap.open(file.c_str());

       parser.printParams();

 

  第一行就是這個類的構造函數,前2個參數是命令行傳過來的,第3個就是剛剛定義的keys了,keys的結構有一定規律,比如說"{c |camera   |false    | use camera or not}" 都是用大括號和雙引號引起來,然後中間的內容分成4斷,用”|”分隔開,分別表示簡稱,文件來源,文件值和幫助語句。第二行和第三行表示打開攝像頭和打開文件,文件的文件名等都在keys指針中了。

  最後一行爲打印keys中的參數,如下:

  

    大概可以看出來用這個類的好處就是很方便,因爲以前版本沒這個類時,如果要運行帶參數的.exe,必須在命令行中輸入文件路徑以及各種參數,並且輸入的參數格式要與代碼中的if語句判斷內容格式一樣,一不小心就輸錯了,很不方便。另外如果想要更改輸入格式的話在主函數文件中要相應更改很多地方。現在有了這個類,只需要改keys裏面的內容就可以了,並且運行時可以直接在vs下用F5,不需要cmd命令行帶參運行。最後這個類封裝了很多函數,可以直接用,只不過這個本來就是類結構的優點。

轉載出處:http://www.cnblogs.com/tornadomeet 歡迎轉載或分享,但請務必聲明文章出處。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章