【问题标题】:Significance of argc and argv in int main( int argc, char** argv ) in OpenCVOpenCV 中 int main( int argc, char** argv ) 中 argc 和 argv 的意义
【发布时间】:2013-09-08 07:08:18
【问题描述】:

在以下程序中用于在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] 只是一个数组元素,我认为与要指定的图像没有关系,并且它还没有在程序的任何地方定义。有人能解开我的疑惑吗?

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

【问题讨论】:

标签: c++ opencv argv argc


【解决方案1】:
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

【讨论】:

  • 感谢您的回复...但是我什么时候必须写“display_image iamge1.jpg”,我的意思是我们要在程序中写它吗??
  • @venus 当你编译和链接你的程序时,它会生成一个与你的.cpp 文件同名的可执行文件。在终端使用./display_image image1.jpg(在linux上)或在命令提示符下使用display_image.exe image1.jpg(在windows上)。有关更多详细信息,请 google “如何在 c++ 中使用命令行参数”
  • @POW 感谢您的指导...有效...再次感谢您
【解决方案2】:

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

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

if (argc != 2) 会在用户错误使用程序时发生。

【讨论】:

  • 感谢您的回复...但是您所说的程序名称是什么意思,它是项目内的 .cpp 文件的名称(即在 Eclipse 中)。我必须在哪里写imdisplay image.jpg???
【解决方案3】:

该程序旨在通过一个指定文件名的参数从命令行调用:

$ display_image filename.jpg

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

【讨论】:

  • 感谢您的回复...但是文件名意味着什么...是图像名称吗?我正在使用 Eclipse,所以,我可以使用命令行界面吗?如果我的问题听起来很愚蠢,请原谅我打扰您。
  • 是的,它是一个命令行程序,您可以通过键入程序名称和要处理的文件名称来运行它。恐怕我对 Eclipse 一无所知,但我希望它有一种方法可以为目标程序指定命令行参数。
【解决方案4】:

如果您使用的是 Visual Studio

argv[1]对应[项目属性]->[配置属性]->[调试]

可以设置图片名称和地址

【讨论】:

    猜你喜欢
    • 2020-11-03
    • 2011-07-08
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2016-09-10
    • 1970-01-01
    相关资源
    最近更新 更多