OpenCV C++学习笔记(7): 命令行解析

OpenCV里有个CommandLineParser, 可以用来解析命令行, 方便不少.

首先要定义一个keys:

const char* keys =
{
    "{help      |   | print this message}"
    "{@input i  |   | input video file}"
    "{@output o |   | output video file}"
    "{low       |35 | low value}"
    "{high      |100| high value}"
};

两根竖线里面是默认值

然后在int main(int argc, const char * argv[])里面, 要声明一个

    CommandLineParser parser(argc, argv, keys);

接着就可以处理parser里的东西了,

  • 判断一个参数有没有, 可以用parser.has(参数名)
  • 取得参数值, 可以用parser.get<类型>(参数名或者序号)

比如, 单独写一个函数来处理这些参数, 用传引用的方法来传递获取的参数值.

bool get_CLI(CommandLineParser &parser,
             String &filename,
             String &output_filename){

    parser.about("change video color and contrast");
    //If requires help show
    if (parser.has("help"))
    {
        parser.printMessage();
        return true;
    }

    filename= parser.get<String>("@input");
    if (parser.has("@output")){
        output_filename=parser.get<String>(1);
    }else{
        output_filename=
        filename.substr(0,filename.length()-4)+
        "_changed.MP4";
    }
    return false;
}