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; }