opencv CommandLineParser类(命令行解析类)

CommandLineParser类(命令行解析类)

该类用于命令行解析。主要是为了方便用户在命令行使用过程中减少工作量,可以在程序文件中直接指定命令行中的参数指令,不用再在命令行中输入参数或者说可以把一些固定的参数放在这个类里,常变的在命令行中输入。

构造函数

cv::CommandLineParser::CommandLineParser( int argc, 
                                          const char *const  argv[], 
                                          const String & keys )
  • argc:命令行参数的数量
  • argv:命令行参数的数组
  • keys:描述可接受的命令行参数的字符串
    keys是一个字符串,包含多个块,每一个都被装在大括号里且描述一个参数。每个参数都被“ | ”符号分隔成三部分。第一部分是参数名称。第二部分是参数的默认值,可以为空。第三部分是描述该参数的帮助信息,可以为空,也可以使用特殊的<none>默认值强制返回的字符串不能为空。如下:
const String keys =
{
	"{help h usage ? |      | print this message   }"
	"{@image1        |      | image1 for compare   }"
	"{@image2        |<none>| image2 for compare   }"
	"{@repeat        |1     | number               }"
	"{path           |.     | path to file         }"
	"{fps            | -1.0 | fps for output video }"
	"{N count        |100   | count of objects     }"
	"{ts timestamp   |      | use time stamp       }"
};

成员函数

void about(const String &message) //设置相关信息,当调用printMessage函数时,相关信息将在参数列表前被打印出来	
bool check() //如果访问参数时发生错误(转换错误、缺少参数等),则返回false。调用printErrors打印错误消息列表。
bool has(const String & name) // 判断参数是否有提供
void printMessage() //打印帮助信息
void printErrors() //打印错误信息
T get<typename T>(const String & name, bool space_delete = true) //通过参数名寻找参数
T get<typename T>(int index, bool space_delete = true) //通过参数索引寻找参数

示例代码

#include <iostream>
#include <opencv2/core/utility.hpp>

using namespace std;
using namespace cv;

int main( int argc, char** argv )
{
    //设置参数列表
    const String keys =
    {
        "{help h usage ? |      | print this message   }"
        "{@image1        |      | image1 for compare   }"
        "{@image2        |<none>| image2 for compare   }"
        "{@repeat        |1     | number               }"
        "{path           |.     | path to file         }"
        "{fps            | -1.0 | fps for output video }"
        "{N count        |100   | count of objects     }"
        "{ts timestamp   |      | use time stamp       }"
    };

    CommandLineParser parser(argc, argv, keys); //构造命令行解析对象
    parser.about("Application name v1.0.0"); //设置相关信息

    parser.printMessage(); //打印帮助信息

    //通过参数名和参数索引获取参数的值
    int N = parser.get<int>("N");
    double fps = parser.get<double>("fps");
    String path = parser.get<String>("path");
    bool 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;
    }
}

运行结果

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AoDeLuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值