命令行解析类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类