int main(int argc , char **argv)
argc , argv : 表示命令行模式下輸入參數的個數和參數內容;
1. command line 命令行模式 : 開始-->運行—>cmd 進入.
2. argc 參數個數 : 以程序名 progName.exe 為 第1 個參數,后續輸入n-1 個,則參數為 n 個.
3. argv 參數內容 : (1) 字符串char[]/char*類型;
(2) 命令行下,空格為字符串分隔符;
(3) argv (命令行模式) , 路徑中分隔符"\"就用"\", 而非Visual Studio 中的"\\"表示"\",這是因為C/C++語言中規定的轉義字符導致.在命令行模式下,不存在這種限制;
例如 路徑和圖像名稱在command line 下: G:\WorkSpace\RGB_IMAGE.jpg
在Visual Studio下: G:\\WorkSpace\\RGB_IMAGE.jpg
4 . 一個程序的main函數, 參數argc,argv可有可無. 無論有無argc,argv都可以在命令行和直接IDE運行Run exe文件.
(1) 若有argc,argv : 在命令行模式運行時會首先執行非argc,argv參數的程序,在該部分執行完畢后, 再執行輸入參數提示和對應的執行;
(2) 若無argc,argv : 則命令行模式和IDE Run模式相同.
5. argc , argv 可以在程序代碼中直接給定,給定時,對於"\"和"\\" 問題則按照Visual Studio標准,給定argv[i]字符串參數時,其中的字符串分隔符采用"\\".
argc,argv在程序中直接給定后,程序可以直接對其進行判斷應用,與通過command line 方式給定一樣的使用.
6 argv[0] 默認是: projName.exe, 在命令行格式下輸入時自動識別.
7 在程序中給argc,argv賦值方式 : 單獨給argc,單獨給argv賦值均可以. argv[0]可以不必賦值,直接賦值argv[i](i>0). 賦值后,argv[i](i>0),就是字符串.
8 argv : 字符和字符串的區別. 賦值字符 argv[i][j] , 賦值字符串 : argv[i] . 這是因為字符串是特殊的字符數組,首地址既是字符串地址.
字符串和字符的賦值方式不同,其操作和判斷方法也隨之變化.
字符的操作可以使用字符處理函數,字符串處理可以使用字符串處理函數.
示例代碼如下:
#include <stdio.h> #include <iostream> #include <fstream> #include <math.h> #include <vector> #include <string> #include "cv.h" #include "highgui.h" #include "cxcore.h" using namespace cv; using namespace std;
int main(int argc, char** argv) { //argc = 2; //argv[0] = "mainFile.exe"; //argv[1] = "G:\\WorkSpace\\RGB_IMAGE.jpg"; /** Test the input parameters,檢測輸入/給定的 argc和argv 參數 ;**/ { if ((1 == argc) || (argc > 2)) { printf("Please input the image path and name .\n"); } else if (2 == argc) { printf("%s %s", argv[0], argv[1]); } } /** Processing the inputting parameters.根據輸入/給定 的argc,argv進行相關處理,此處可以加入對輸入的字符串語義檢測,從而執行不同判斷.; **/ { if (argv[1]) { // 注意這里要加上判斷argv[1]是否為空.; Mat img01 = imread(argv[1]); namedWindow("Input Path Dis", CV_WINDOW_AUTOSIZE); imshow("Input Path Dis", img01); cvWaitKey(0); cvDestroyWindow("Input Path Dis"); } } /** 程序的argc和argv可有可無,且若有的話在命令行模式下先執行完非 argc和argv 參數代碼功能,再判斷執行 argc和argv 功能; 而在IDE Run模式下也一樣.;**/ { argv[1] = "G:\\WorkSpace\\RGB_IMAGE.jpg"; string imgPath01 = "G:\\WorkSpace\\RGB_IMAGE.jpg"; if (!imgPath01.empty()) { // Judge the empty ; Mat img01 = imread(imgPath01); namedWindow("String UnInput Path Dis", CV_WINDOW_AUTOSIZE); imshow("String UnInput Path Dis", img01); cvWaitKey(0); cvDestroyWindow("String UnInput Path Dis"); } } return 0; }