在一些程式中會看到這樣的定義
int main(int argc, char **argv) 或
int main(int argc, char *argv [])
這樣的寫法在一些C\C++會經常看到,現在對這兩個參數做一個解釋。
在上述代碼行中argc表示指令行輸入參數的個數(以空白符分隔),argv中存儲了所有指令行的參數。這裡的指令行不是指在IDE輸入什麼指令,而是在Windows的DOS和Linux中執行可執行檔案時輸入的指令。如下程式(Windows版本):
#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
using namespace std;
using namespace cv;
int main(int argc, char **argv)
{
if (argc != )
{
cout << "輸入指令行的參數不正确!" << endl;
return -;
}
Mat srcImage;
srcImage = imread(argv[], CV_LOAD_IMAGE_ANYCOLOR);
if (!srcImage.data)
{
cout << "檔案為空!" << endl;
return -;
}
namedWindow("argcargv", WINDOW_AUTOSIZE);
imshow("argcargv", srcImage);
waitKey();
return ;
}
生成解決方案後,不運作,找到工程中的Debug檔案夾下會看到有一個.exe執行檔案,如我的是argcDOS.exe。将圖像檔案放入到Debug檔案中,打開DOS視窗,進入到.exe檔案夾中執行如下操作(以我的檔案為例):
結果如下:
在DOS視窗中輸入的指令行argcDOS.exe lena.bmp,argc代表是輸入指令行個數即在此例中為2,argv[]存儲指令内容,在此為argv[0]中存儲argcDOS.exe,argv[1]存儲lena.bmp。
PS:今天用Windows做的示範,是因為Linux崩潰了,重裝中,哭….
更新Linux環境運作方式,不再重複,見截圖