3

画像をロードするための OpenCV のコードの機能を理解できません。if(argc !=2) の機能は何ですか? それについて教えていただけますか。

 if( argc != 2)
    {
     cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
     return -1;
    }

完全なコード:

1 #include <opencv2/core/core.hpp>
2 #include <opencv2/highgui/highgui.hpp>
3 #include <iostream>
4
5 using namespace cv;
6 using namespace std;
7
8 int main( int argc, char** argv )
9 {
10 if( argc != 2)
11 {
12 cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
13 return -1;
14 }
15
16 Mat image;
17 image = imread(argv[1], CV_LOAD_IMAGE_COLOR); // Read the file
18
19 if(! image.data ) // Check for invalid input
20 {
21 cout << "Could not open or find the image" << std::endl ;
22 return -1;
23 }
24
25 namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
26 imshow( "Display window", image ); // Show our image inside it.
27
28 waitKey(0); // Wait for a keystroke in the window
29 return 0;
30 }
4

2 に答える 2

21

これについては、GNU チュートリアルなど、C++ (または C、ObjC、または関連言語) のチュートリアルで説明する必要があります。

mainC++ プログラムの関数には、慣例により と という名前の 2 つのパラメーターがargcありargv、プログラムの起動に使用されるコマンドライン引数を指定します。

argcは引数の数でargv、文字列の配列です。

プログラム自体が最初の引数 でargv[0]あるため、argc常に少なくとも 1 です。

プログラムが 1 つのコマンドライン引数で実行される場合もargc同様です。2引数なしで実行した場合、または複数の引数を指定して実行した場合はargc != 2true になるため、使用方法に関するメッセージ "Usage: display_image ImageToLoadAndDisplay" が出力され、適切に実行する方法がユーザーに伝えられます。


たとえば、次のようにします。

$ display_image firstarg "second arg"

値は次のとおりです。

argc: 3
argv[0]: "display_image"
argv[1]: "firstarg"
argv[2]: "second arg"

コードが多くの点で奇妙であることを指摘する価値があるかもしれません。使用法メッセージの先頭にある余分なスペースは非常に奇妙です。「使用法」は通常すべて小文字です。argv[0]通常、ハードコーディングされた正規名ではなく、実際のプログラム名 ( ) を文字列に入れます。使用法に関するメッセージは通常cerr、 ではなくに送られますcout。また、規則では、ユーザーの過失によるエラーには正の数を返します。通常、無効な引数には -1 ではなく 2 を返します。argcUnix コマンド ラインで使用するために作成されたほぼすべてのツールのソース コードで、 /処理のより良い例を見つけることができますargv(ただし、それらのほとんどはより複雑で、多くの場合getopt、ファイル引数からオプションを解析するなどのライブラリを使用します)。

于 2013-08-23T17:49:49.097 に答える
2
  • argc= 引数の数。これは、プログラムが実行されるコマンド ライン引数の数を決定するために使用されます。
  • argvプログラムの名前を含むすべてのコマンドライン引数の名前を保持する引数ベクトルと呼ばれます。
  • 実行するどのプログラムでも、argc は常に少なくとも 1 です。これは、プログラム自体が引数の数に含まれているためです。したがって、プログラムでは、argc は 2 である必要があり、これは と で構成され your_programますanother_file。argc が 2 でない場合、これは 1 に等しいか 2 より大きいことを意味し、これはプログラムが望んでいるものではないため、コードはそれ以上の実行を中止します
于 2013-08-23T22:18:53.453 に答える