OpenCV argc和argv混淆

时间:2013-05-31 10:39:54

标签: c opencv argv argc

我正在检查一些OpenCV教程并在开头找到这一行(这里是链接,代码在CalcHist部分http://opencv.willowgarage.com/documentation/c/histograms.html下)

if (argc == 2 && (src = cvLoadImage(argv[1], 1)) != 0)

我以前从未见过这个,真的不明白。我查了一些关于这个问题的问答,但仍然不明白。 有人可以向我解释这条线的含义是什么?

谢谢!

1 个答案:

答案 0 :(得分:5)

该行按顺序执行以下操作:

  1. 测试argc == 2 - 即,是否只有1个命令行参数(第一个“参数”是可执行文件名称)
  2. 如果是这样(因为如果argc不是2,则短路&&将中止测试而不评估右侧),将src设置为结果cvLoadImage调用了该命令行参数
  3. 测试该结果(因此src)是否不为零
  4. argcargv是C中main函数采用的两个参数的名称(几乎总是)。argc是一个整数,并且是相等的调用可执行文件时出现的命令行参数的数量。 argv是一个char*数组(表示以NULL结尾的字符串数组),包含这些命令行参数的实际值。从逻辑上讲,它包含argc个条目。

    请注意,argcargv始终将可执行文件的名称作为第一个条目,因此以下命令调用:

    $> my_program -i input.txt -o output.log
    

    ...将{5}放入argcargv将包含五个字符串my_program-iinput.txt-ooutput.log

    因此,除了可执行文件名argc == 2之外,引用的if-test首先检查是否只有1个命令行参数。然后继续使用该参数(cvLoadImage(argv[1], 1)

    检查argc然后使用argv[n]是一种常见的习惯用法,因为在argv数组的末尾访问unsafe是{{3}}。