简介

  • OpenCV中常用的类

OpeCV cv::CommandLineParser 详解

cv::CommandLineParser 是 OpenCV 库提供的一个实用类,用于解析 C++ 应用程序中的命令行参数。它特别适用于需要通过命令行指定参数的应用程序,例如图像处理管道或计算机视觉任务。

下面是 cv::CommandLineParser 的工作原理及如何使用的详细说明:

  1. 初始化:要使用 cv::CommandLineParser,首先需要创建一个实例。

    1
    
     cv::CommandLineParser parser(argc, argv, keys);
    
    • argc 是命令行参数的数量。
    • argv 是包含实际命令行参数的 C 风格字符串数组。
    • keys 是一个字符串,包含了程序支持的选项列表,格式化方式可以被 cv::CommandLineParser 理解。
  2. 定义选项keys 字符串定义了解析器可以识别的选项。每个选项都使用短名称、长名称和可选的默认值进行指定。选项之间用逗号分隔。

    1
    2
    3
    
     const char* keys =
         "{ help h |      | 打印帮助信息 }"
         "{ @input |<none>| 输入图像 }";
    

    在这个例子中:

    • helph 是一个布尔选项,没有默认值,用于显示帮助信息。
    • @input 是一个期望其值为输入图像文件的选项。
  3. 解析:初始化解析器并定义选项之后,可以解析命令行参数。

    1
    
     parser.parseArgs();
    

    这将处理 argcargv 中提供的命令行参数。

  4. 访问值:解析完成后,可以使用 get<Type>() 方法访问选项的值。

    1
    2
    3
    4
    5
    6
    
     if (parser.has("help")) {
         parser.printMessage();
         return 0;
     }
    
     std::string inputFile = parser.get<std::string>("@input");
    
    • has() 检查特定选项是否存在。
    • get<Type>() 检索与选项关联的值。
  5. 处理默认值:如果选项在 keys 中有指定默认值,那么如果命令行中没有提供该选项,将使用默认值。

  6. 错误处理cv::CommandLineParser 还提供了处理错误的方法,例如缺少必需参数或无效输入。

使用 cv::CommandLineParser 可以使你的 C++ 应用程序更加用户友好,更容易通过命令行进行配置。它是一种方便的方法,可以在不必从头开始编写自定义解析逻辑的情况下处理命令行参数。

OpenCV cv::TickMeter 详解

cv::TickMeter 是 OpenCV 中用于计算时间间隔的类。它可以帮助你测量代码片段的执行时间,从而评估算法的性能或优化代码。

以下是关于 cv::TickMeter 的详细说明:

  1. 初始化:你可以使用默认构造函数来创建 cv::TickMeter 实例。你也可以在创建实例时指定计时器的时钟类型。

    1
    
     cv::TickMeter tm;
    

    或者

    1
    
     cv::TickMeter tm(cv::TickMeter::TICKS); // 指定时钟类型为 TICKS
    

    TICKS 是默认的时钟类型,也可以选择使用 MILLISECONDMICROSECOND

  2. 启动计时器:调用 start() 方法开始计时。

    1
    
     tm.start();
    
  3. 停止计时器:调用 stop() 方法停止计时。

    1
    
     tm.stop();
    
  4. 获取时间:你可以使用 getTimeTicks()getTimeMicro()getTimeMilli() 方法来获取计时器的时间。

    1
    2
    3
    
     int64_t ticks = tm.getTimeTicks(); // 获取时钟周期数
     double microseconds = tm.getTimeMicro(); // 获取微秒
     double milliseconds = tm.getTimeMilli(); // 获取毫秒
    
  5. 重置计时器:你可以使用 reset() 方法来重置计时器,以便进行下一次测量。

    1
    
     tm.reset();
    
  6. 打印时间cv::TickMeter 还提供了一个 printf() 方法,用于在控制台上打印计时器的时间。

    1
    
     tm.print("Time:");
    

    这将打印格式化的时间信息,包括总时间、平均时间和帧速率。

cv::TickMeter 对于评估代码的性能、进行时间测量以及优化算法都非常有用。通过使用它,你可以轻松地测量代码段的执行时间,从而更好地理解和改进你的程序。