OpenCVの最新バージョンのCommandLineParserクラス


CSDNから:蒋坤
ここにいるよcppにはCommandLineParserというクラスが出てきて、何に使うのか分からないので、ドキュメントを調べてやっと分かりました.
このクラスの実装については、rootopencvmodulescoresrccmdparserを参照してください.cpp(rootはopencvをインストールする場所です)
Opencvのcバージョンではopencv 1のはずです.0以前はCommandLineParserというクラスはまだ現れていませんが、最近opencv 2を見ました.3以降のバージョンでは、CommandLineParserというクラスが多く使われていますが、このクラスはいったいどんな役割を果たしているのでしょうか.名前からコマンドライン解析クラスだと推測できます.Opencvはオープンソースライブラリであることを知っているので、グラフィック操作のapiはほとんどなく、基本的にコマンドラインに基づいて実行されています.では、このクラスの出現は主にユーザーがコマンドラインの使用中に作業量を減らすのに便利で、プログラムファイルの中で直接コマンドラインのパラメータ命令を指定することができて、デバッグを便利にしました.
次の例を簡単に書きました.
#include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

#include 
#include 
#include 

using namespace cv;
using namespace std;

const char* keys =
{
    "{ c | camera | 0 | use camera or not}"
    "{ fn | filename |xxxx.avi | movie file}"
    "{ t | test | test string | good day!}"
};


int main(int argc, const char** argv )
{

    CommandLineParser parser(argc, argv, keys);
    
    bool useCamera = parser.get("c");//     “camera”   
    string file = parser.get("fn");
    string third = parser.get("t");

    //    
    cout<

 
最初の行はこのクラスのコンストラクション関数で、最初の2つのパラメータはコマンドラインから伝わってきて、3つ目は定義したばかりのkeysで、keysの構造には一定の法則があります.例えば、「{c|camera|0|use camera or not}」はすべて括弧と二重引用符で引き起こされて、それから中間の内容は4つに分けて、ファイル値とヘルプ文.2行目と3行目は、カメラを開くことやファイルを開くこと、ファイルのファイル名などがkeysポインタに入っていることを示します.
このクラスを使用する利点は、以前のバージョンでこのクラスがなかった場合、パラメータ付きを実行する場合に便利であることがわかります.exeは、コマンドラインにファイルパスや各種パラメータを入力しなければなりません.また、入力したパラメータフォーマットは、コードのif文でコンテンツフォーマットを判断するのと同じで、うっかりミスをしてしまい、不便です.また、入力フォーマットを変更する場合は、メイン関数ファイルでそれに応じて多くの場所を変更します.今このクラスがあって、keysの中の内容を変えるだけでいいです.そして、直接実行することができて、cmdコマンドラインバンドパラメータを必要としません.最後にこのクラスは多くの関数をカプセル化して、直接使うことができますが、これはもともとクラス構造の利点です.