命令行解析類CommandLineParser
該類的作用主要用於命令行的解析,也就是分解命令行的作用。以前版本沒這個類時,如果要運行帶參數的.exe,必須在命令行中輸入文件路徑以及各種參數,並且輸入的參數格式要與代碼中的if語句判斷內容格式一樣,很不方便。另外如果想要更改輸入格式的話在主函數文件中要相應更改很多地方。現在有了這個類,只需要改keys里面的內容就可以了 。
在OpenCV源碼中,其聲明位於頭文件 utility中。因此在使用前,一般需要進行頭文件包含。
#include <opencv2/core/utility.hpp>
類成員
public: CommandLineParser (int argc, const char *const argv[], const String &keys);//構造函數 CommandLineParser (const CommandLineParser &parser);//拷貝構造函數 ~CommandLineParser ();//析構函數 void about (const String &message); bool check () const; template<typename T > T get (const String &name, bool space_delete=true) const; template<typename T > T get (int index, bool space_delete=true) const; String getPathToApplication () const; bool has (const String &name) const; CommandLineParser & operator= (const CommandLineParser &parser);//賦值運算符重載 void printErrors () const; void printMessage () const; protected: void getByIndex (int index, bool space_delete, int type, void *dst) const; void getByName (const String &name, bool space_delete, int type, void *dst) const; Impl * impl;
注釋的幾條函數為常用函數:
1、構造函數------接收命令行輸入的指令
2、get-----獲得指定的參數的內容
3、has----在get之前可以先檢查是否含有此指令
4、check---在使用這些參數之前,檢查是否有解析錯誤的現象;
使用示例
CommandLineParser parser(argc, argv, keys); parser.about("Application name v1.0.0"); if (parser.has("help")) { parser.printMessage(); return 0; } int N = parser.get<int>("N"); double fps = parser.get<double>("fps"); String path = parser.get<String>("path"); use_time_stamp = parser.has("timestamp"); String img1 = parser.get<String>(0); String img2 = parser.get<String>(1); int repeat = parser.get<int>(2); if (!parser.check()) { parser.printErrors(); return 0; }
Reference
[1] OpenCV官網
[2] OpenCV中CommandLineParser類