argc和argv在OpenCV中的int main(int argc,char ** argv)中的意义

时间:2013-09-04 16:48:32

标签: c++ opencv argv argc

在以下用于在openCV中加载和显示图像的程序

#include <opencv2/core/core.hpp>   
#include <opencv2/highgui/highgui.hpp>  
#include <iostream>

using namespace cv;  
using namespace std;

int main( int argc, char** argv )  
{  
    if( argc != 2)   
    { 
     cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
     return -1;
    }

    Mat image;
    image = imread(argv[1], CV_LOAD_IMAGE_COLOR);   // Read the file

    if(! image.data )                              // Check for invalid input
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }

    namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
    imshow( "Display window", image );                   // Show our image inside it.

    waitKey(0);                                          // Wait for a keystroke in the window
    return 0;
}

我无法理解程序员如何指定输入图像。这是因为argv [1]只是一个数组元素,我认为与要指定的图像无关,并且它尚未在程序中的任何位置定义。任何人都可以清楚我的怀疑吗?

还有一件事:检查是否(argc!= 2)的“if”语句中检查了什么?

4 个答案:

答案 0 :(得分:6)

main( int argc, char** argv )
           |            |
           |            |
           |            +----pointer to supplied arguments
           +--no. of arguments given at command line (including executable name)

示例:

display_image image1.jpg

下面,

argc will be 2
argv[0] points to display_image
argv[1] points to image1

if(argc !=2 )
   ^^ Checks whether no. of supplied argument is not exactly two

答案 1 :(得分:1)

该程序应从命令行调用,其中一个参数指定文件名:

$ display_image filename.jpg

在这种情况下,argv[1]将是指向字符串“filename.jpg”的指针。

答案 2 :(得分:1)

当用户从命令行界面运行程序时,他们可以在键入程序名称后指定文件的路径:imdisplay image.jpg

argc包含总参数的数量,包括程序的名称。因此,如果用户未键入图像名称,则argc为1. argvchar*的大小为argc的数组。所以argv[0]是用户输入的程序名称,argc[1]是第一个参数。

如果用户错误地使用该程序,则会发生

if (argc != 2)

答案 3 :(得分:0)

如果您使用的是 Visual Studio

argv [1]对应于 [项目属性] -> [配置属性] -> [Debug]

它可以设置图像名称和地址