OpenCV中CommandLineParser无法识别含减号的参数如何修复
问题根源
OpenCV的CommandLineParser有默认参数解析规则:所有以--/-开头的参数都会被识别为命名参数,不会被计入@前缀定义的位置参数序列。
你传入的--bright带--前缀被判定为命名参数、-10带-前缀也被判定为命名参数,两者都从位置参数池被排除,所以实际只有./image.png被识别为第一个位置参数,后两个位置参数为空,和你看到的输出一致。
修复方案
方案1:不修改代码,调整运行命令
在所有参数前加--分隔符,分隔符后的所有内容会被强制识别为位置参数:
./main -- --bright ./image.png -10
运行后即可得到你期望的输出--bright | ./image.png | -10。
方案2:调整参数定义,适配命名参数规则
如果--bright是功能标识、-10是对应参数值,可以修改keys定义适配命名参数规则:
const char* keys = { "{bright || 亮度调整参数}" "{@input || 输入图片路径}" };
运行命令改为:
./main --bright=-10 ./image.png
取值代码对应调整为:
String bright_val = parser.get<String>("bright"); String input_path = parser.get<String>(0);
方案3:全部使用无特殊前缀的位置参数
如果三个参数都是纯位置参数,传参时去掉参数前缀即可:
./main bright ./image.png 10
原有代码不用修改,就能正常获取三个参数的值。
内容的提问来源于stack exchange,提问作者Claire Duong
相关产品推荐
相关产品推荐

