【CommandLineParser类】opencv库中的命令行解析类
CommandLineParser类用于命令行解析,可以在程序文件中直接调用参数。
1. 构造函数
cv::CommandLineParser::CommandLineParser( int argc,
const char *const argv[],
const String & keys )
- argc:命令行参数的数量
- argv:命令行参数的数组
- keys:描述可接受的命令行参数的字符串
keys是一个字符串,包含多个块,每一个都被装在大括号里且描述一个参数。每个参数都被“ | ”符号分隔成三部分。 第一部分是参数名称。 第二部分是参数的默认值,可以为空。 第三部分是描述该参数的帮助信息,可以为空。
格式:
参数或指令的名称 | 参数或指令的内容 | 说明
const String keys =
"{low |20 | low threshold }"
"{high |40 | high threshold }"
"{mode |1 | same as cv::findContours }" ;
2. 常用函数
1. get() : 获取指令名称的参数值
- name 指令名称
- space_delete 此参数默认为true,把参数内容中的头尾的空格去掉。
template <typename T>
T get(const String& name, bool space_delete = true) const
{
T val = T();
getByName(name, space_delete, ParamType<T>::type, (void*)&val);
return val;
}
template <typename T>
T get(int index, bool space_delete = true) const
{
T val = T();
getByIndex(index, space_delete, ParamType<T>::type, (void*)&val);
return val;
}
2. has() : 查看是否有此指令名称,返回bool类型
备注: 此函数本质上是检查两个东西: 1、此指令是否存在 2、此指令对应的指令内容存在; 以上二者都存在,返回true;
所以,只要在命令行输入此值令,并且指令存在,一定返回ture.(因为如果不指定参数内容,系统会默认true)
但是,在构造函数key_map中,如果指令参数没有填写。即使key_map中存在此指令,也会返回false。(因为没有参数内容)(另外;前提是命令行没有输入此指令)
bool has(const String& name) const;
3. check() : 查看指令是否有错误,无法解析
bool check() const;
4. about() : 输出指定内容
void about(const String& message);
5. printMessage() : 打印参考内容
void printMessage() const
6. printErrors() : 打印错误
void printErrors() const;
3. 简明应用
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, const char ** argv)
{
const String keys =
"{help h usage ? | | print this message }"
"{@test