Significado de argc y argv en int main( int argc, char** argv ) en OpenCV

En el siguiente programa para la carga y visualización de imágenes en 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;
}

No soy capaz de entender cómo el programador es la especificación de la imagen de entrada. Esto es debido a que argv[1] es sólo un elemento de la matriz y creo que no tiene ninguna relación con la imagen que se especifica, y no ha sido definido en cualquier lugar en el programa. ¿Alguien puede aclarar mi duda?

Una cosa más: Lo que se comprueba en la instrucción «if» que comprueba si(argc !=2)?

OriginalEl autor venus | 2013-09-04

4 Kommentare

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

    Ejemplo :

    display_image image1.jpg

    Aquí,

    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
    Gracias por tu respuesta…pero cuando tengo que escribir «display_image iamge1.jpg», me refiero a que vamos a escribir en el programa??
    Cuando se compila & enlace de su programa , que va a generar un ejecutable con el mismo nombre que el de su .cpp archivo. Uso ./display_image image1.jpg en el terminal (en linux) o display_image.exe image1.jpg en el símbolo del sistema (en windows). Para obtener más detalles de google «cómo el uso de argumentos de línea de comandos en c++»
    Gracias por su orientación…funciona…gracias de nuevo

    OriginalEl autor P0W

  2. 1

    Cuando un usuario ejecuta el programa desde una interfaz de línea de comandos, se puede especificar una ruta de acceso al archivo después de escribir el nombre del programa: imdisplay image.jpg

    argc contiene el número total de argumentos, incluyendo el nombre del programa. Por lo tanto, si el usuario no escriba un nombre de la imagen, a continuación, argc es 1. argv es una matriz de char*s de tamaño argc. así argv[0] es el nombre del programa escrito por el usuario, y argc[1] es el primer argumento.

    if (argc != 2) va a pasar si el usuario está utilizando el programa incorrecto.

    Gracias por tu respuesta…pero, ¿qué entiende usted por el nombre del programa, es el nombre de .archivo cpp dentro de un proyecto(es decir, en Eclipse). ¿Dónde tengo que escribir imdisplay image.jpg???

    OriginalEl autor jhauris

  3. 1

    El programa está diseñado para ser llamado desde la línea de comandos con un argumento que especifica el nombre de archivo:

    $ display_image filename.jpg

    En este caso el argv[1] va a ser un puntero a la cadena «filename.jpg».

    Gracias por tu respuesta…pero ¿qué significa el nombre de archivo significar…es el nombre de la imagen? Estoy usando Eclipse, así que, puedo utilizar la interfaz de línea de comandos?..perdón por molestarte si mi pregunta sonar tonto.
    Sí, es un programa de línea de comandos y ejecutar escribiendo el nombre del programa seguido por el nombre del archivo que desea procesar. No sé nada acerca de Eclipse me temo, pero espero que haya una manera de especificar los argumentos de línea de comandos para el programa de destino.
    Gracias por su respuesta positiva…la tengo…gracias

    OriginalEl autor Paul R

  4. 0

    Si usted está usando Visual Studio

    argv[1] corresponde a [Propiedades del Proyecto]->[Propiedades de Configuración]->[Debug]

    Se puede configurar la imiage nombre y la dirección

    OriginalEl autor LIFUGUAN

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea