0

To parse the command line arguments with OpenCV (C++) I have defined the keyString like that:

const String keyStrings = "{@filepath | lena.jpg | input image}"
        "{@commandCode | color2BW | command code}"
        "{@alpha | 1.0 | alpha}"
        "{@beta | 1.0 | beta}";
    CommandLineParser parser(argc, argv, keyStrings);

When I get the alpha, beta like this:

double alpha = parser.get<double>("@alpha");
double beta = parser.get<double>("@beta");

If someone pass the alpha or beta values as a negative number, alpha, beta will received 1.0 as its values. I don't know how to fix it.

Hung Vo
  • 66
  • 1
  • 10
  • Probably because `'-'` is just as commonly used to prefix command switches as `'/'` is. The parser probably doesn't know to parse those parameters as numbers – Remy Lebeau Mar 23 '22 at 01:02

1 Answers1

0

i'd think, this is a bug (which should be reported)

however you can work around it by using named arguments instead of positional (prefixed with @) ones, like:

int main(int argc, char **argv)
{
    const String keyStrings =
            "{alpha | 1.0 | alpha}" // no @
            "{beta | 1.0 | beta}";
    CommandLineParser parser(argc, argv, keyStrings);

    double alpha = parser.get<double>("alpha"); // no @
    double beta = parser.get<double>("beta");
    cout << alpha << " " << beta << endl;
}

and use it like:

./demo --alpha=3 --beta=-2
berak
  • 1,226
  • 2
  • 5
  • 7