Tutorial: Hello World OpenCV

Voy ha hacer un pequeño tutorial para aquellos que quieran empezar con openCV y C++.

Previamente os tendríais que mirar el siguiente enlace donde se explica cómo compilar aplicaciones OpenCV con Dev-C++:

http://ionthas.wordpress.com/2008/11/18/howto-compilar-opencv-en-dev-c/

Ahora que ya podemos compilar una aplicación OpenCV vamos a por el código:


#include <cv.h>

#include <highgui.h>


int main(int argc, char** argv)

{

// Crea una ventana llamada Original Image con un tamaño predeterminado.

cvNamedWindow(“Original Image”,
CV_WINDOW_AUTOSIZE);

// Crea la conexion con la Webcam.

CvCapture* capture = cvCreateCameraCapture(0);

// Variable donde se almazenara el frame sacado de la webcam.

IplImage* originalImg;

// Hago que el ancho del capture sea de 320px con eso la altura se adaptara.

if(cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH,320))

while(true) {

// Pongo el frame capturado de “capture” dentro de la imagen originalImg.

originalImg = cvQueryFrame(capture);

if(!originalImg) break;

// Hago que se vea el frame dentro de la ventana “Original Image”.

cvShowImage(“Original Image”, originalImg);

// Espero a que me pulsen el ESC para salir del bucle infinito.

char c = cvWaitKey(10);

if( c == 27 ) break;

}

// Libera la memoria utilizada por la variable capture.

cvReleaseCapture(&capture);

// Destruye la ventana “Original Image”.

cvDestroyWindow(“Original Image”);

}


PD. El código esta explicado en los comentarios.

Aquí una imagen y el archivo del programa:

HelloWorld OpenCV en funcionamiento

HelloWorld OpenCV en funcionamiento

Código de la aplicación: HelloWorldOpenCV

Saludos, Ionthas.

Advertisement

17 Respuestas a Tutorial: Hello World OpenCV

  1. weeberp dice:

    Todavía no consigo que funcione por problemas de compilar que pone que no encuentra la librería highgui110.dll, pero de todas formas para el que lo copie directamente aviso que las comillas en el nombre de la ventana están mal no es: ”Original Image” sino “Original Image” por lo menos me da correcto al escribir ;)

  2. Hola muy bueno el articulo. He empleado tu ejemplo sobre Dev C++ y me sale esto en el compilador:

    C:\Dev-Cpp\Bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lconio
    collect2: ld returned 1 exit status
    make.exe: *** [HelloWorldOpenCV.exe] Error 1
    Execution terminated

    y no se por que me falla por que aparentemente todo va bien. Escribeme, please. Un saludo

    • ionthas dice:

      Buenas, Juan Antonio.

      Creo que ese error te sale porque utilizas la libreria conio.h, ya que es una libreria de Borland. Por lo que utilizando Dev-C++ no se si serà un problema.

      Saludos, Ionthas.

  3. ptforever dice:

    tenes que linkear la libreria conio en varias paguinas te dan a conoces como

  4. mariano dice:

    tengo un incobeniente e podido compilar lo anterior pero cuando se ejecuta prende y apaga la camara ya tiene todas las dll en el system32 otros ejemplos los compila y ejecuta bien como los samples que vienen con la libreria

  5. eugenio dice:

    alguna idea de como cambiarle el nombre a la imagen guardada con la funcion cvSaveImage(“salida.bmp” ,frame); para que el archivo salga salida1.bmp ,salida2
    y asi hasta salir del programa

    • ionthas dice:

      La respuesta al problema.

      int photoCount = 0;
      char photoName[100];

      sprintf(photoName, “C:\\StoredImages\\AutonomousMode%i.jpg”, photoCount);
      cvSaveImage(photoName, parFrame);

      Saludos!

  6. eugenio dice:

    listo muchas grasias me sirvio le tube qe agregar el photoCount++; para que aumente de numero

  7. mazzi dice:

    ami no me sale pueden poner el codigo completo

  8. Auraluz dice:

    Hola,

    Yo tengo una duda, ¿cómo puedo hacer para cargar una foto y que me detecte los puntos salientes?

    Muchas gracias de antemano por su ayuda

  9. Carlos dice:

    Hola que tal,
    exelente tutorial y buen ejemplo pero tengo un problema,
    cuando compilo el codigo lo que hace es que prende la camara por unos instantes, no se ve imagen en la pantalla y despues se apaga.

    Gracias porla ayuda

  10. helm dice:

    Hola, estoy comenzando con opencv y me a funcionado correctamente, gracias, si tenes mas tuturiales publicalos.

    Gracias por la ayuda

  11. Ricardo dice:

    En la linea
    if(cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH,320))
    me di cuenta que por esa razon se abre y se cierra inmediatamente
    y puse
    if(!cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH,320))
    con esto funciono el programa

    Podrias darme mas informacion sobre esta funcion? ya que en la documentacion no encontre bien que devuelve la función al encontrar un error, que me supongo es lo que sucede

    Saludos

  12. hola como esta lo mandoa compilar
    y me sombrea cvNamedWindow(“Original Image”,
    donde creo esa ventana llamada original

  13. victoria dice:

    me ha funcionado perfect, me suscribo al blog porque veo que tambien tocas robótica como yo, :)

  14. Leo dice:

    He metido el compilador OpenCv en Dev C, y he intentado compilar un un codigo sencillo:

    //librerias iniciales para poder trabajar con las imagenes
    #include “highgui.h”
    #include
    #include
    #include

    //inicio el programa
    int main(int argc, char *argv[])
    {

    //cargo la imagen
    IplImage* img = cvLoadImage( “lena3.jpg”,1 ); //lena es el nombre de la imagen Aqui pueden colocar cualquiera

    //para los canales de rgb
    IplImage* r = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 1 );
    IplImage* g = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 1 );
    IplImage* b = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 1 );

    //para crear las imagen en hsv
    IplImage* hsv = cvCreateImage( cvGetSize(img), 8, 3 );

    //cambiamos de rgb a hsv
    cvCvtColor(img, hsv, CV_BGR2HSV);

    // para sacar canales de la imagen RGB
    cvSplit( img, r, g, b, NULL );

    //nombre de las ventanas a crear
    cvNamedWindow(“Imagen HSV”, CV_WINDOW_AUTOSIZE);
    cvNamedWindow( “Imagen RGB”, CV_WINDOW_AUTOSIZE );

    //para los canales rgb
    cvNamedWindow( “Canal R”, CV_WINDOW_AUTOSIZE );
    cvNamedWindow( “Canal G”, CV_WINDOW_AUTOSIZE );
    cvNamedWindow( “Canal B”, CV_WINDOW_AUTOSIZE );

    //muestro las imagenes
    cvShowImage( “Imagen RGB”, img );
    cvShowImage( “Imagen HSV”, hsv);

    //para los canales rgb mostrar
    cvShowImage( “Canal R”, r);
    cvShowImage( “Canal G”, g);
    cvShowImage( “Canal B”, b);

    //espera la tecla Esc para salir cuando se presione
    cvWaitKey(0);

    //para destruir las ventanas aunqe no es necesario “eso creo jejje”
    cvDestroyWindow(“Ejemplo”);

    return 0;
    }

    y al compilar sale el siguiente error

    Compilador: OpenCv
    Ejecutando g++.exe…
    g++.exe “C:\Dev-Cpp\p1.cpp” -o “C:\Dev-Cpp\p1.exe” -g3 -I”C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include” -I”C:\Dev-Cpp\include\c++\3.4.2\backward” -I”C:\Dev-Cpp\include\c++\3.4.2\mingw32″ -I”C:\Dev-Cpp\include\c++\3.4.2″ -I”C:\Dev-Cpp\include” -I”E:\Archivos de programa\OpenCV\cv\include” -I”E:\Archivos de programa\OpenCV\cvaux\include” -I”E:\Archivos de programa\OpenCV\cxcore\include” -I”E:\Archivos de programa\OpenCV\otherlibs\highgui” -L”C:\Dev-Cpp\lib” -L”E:\Archivos de programa\OpenCV” -lhighgui -lcv -lcxcore -lcvaux -g3
    C:\Dev-Cpp\Bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lhighgui
    collect2: ld returned 1 exit status

    Ejecución Terminada

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.