Configuración de OpenCV en Visual Studio 2010

Antes de poder empezar con el mundo de la visión con OpenCV es necesario realizar un par de configuraciones en el IDE de tu preferencia, en esta entrada describiré los pasos que hay que seguir para realizar la configuración de OpenCV 2.4.0 sobre “Visual Studio 2010 professional edition”, utilizare para este propósito un OS Windows 7 de 64 bits. A pesar de que el OS es de 64 bits, en el ejemplo emplearé librerías de 32 bits las cuales pueden ser usadas sin problemas en sistemas de 64 bits.

PASO 1. DESCARGAR LA ULTIMA VERSIÓN DE OPENCV

Para realizar este paso es necesario entrar a la página de repositorios de código de OpenCV, la sección de descargas para Windows es la que nos interesa, la puedes encontrar en el siguente Link: http://sourceforge.net/projects/opencvlibrary/files/opencv-win/

Esta es una vista de la página de descargas:

Como puedes observar tenemos disponibles todas las versiones publicadas hasta la fecha desde la 1.0 hasta la mas reciente. Hacer clic en la versión 2.4.0, descargar la que tiene por nombre “OpenCV-2.4.0.exe”.
Una vez descargado el ejecutable, realizar la instalación la cual solo descomprimirá los archivos fuente de OpenCv.

Como sugerencia, colocar la carpeta en el directorio Raíz y renombrarlo como “OpenCV2.4.0“.

PASO 2. CONFIGURACIÓN DE SISTEMA OPERATIVO

Agregar al la variable de entorno PATH del sistema operativo las rutas de los binarios de OpenCV, sugiero para este caso utilizar el software “Path Editor” el cual es gratuito y dispone de una interfaz gráfica que facilita la administración de la variable PATH.

Los directorios que deberán ser agregados al PATH son:
  1. C:\OpenCV2.4.0\opencv\build\x86\vc10\bin
  2. C:\OpenCV2.4.0\opencv\build\common\tbb\ia32\vc10
Consideraciones Importantes para le directorio bin:
  • Usar x86 cuando se crearán proyectos para arquitecturas de 32 bits.
    • Utiliza vc9 para Vs2008
    • Utilziar vc10 para Vs2010
  • Usar x64 cuando se crearán proyectos para arquitecturas de 64 bits.
    • Utiliza vc9 para Vs2008
    • Utilziar vc10 para Vs2010
Consideraciones Importantes para le directorio tbb:
  • Usar ia32 cuando se crearán proyectos para arquitecturas de 32 bits.
    • Utiliza vc9 para Vs2008
    • Utilziar vc10 para Vs2010
  • Usar intel64 cuando se crearán proyectos para arquitecturas de 64 bits.
    • Utiliza vc9 para Vs2008
    • Utilziar vc10 para Vs2010.

PASO 3. CREAR EL PROYECTO

Una vez que se han realizado las configuraciones correspondientes, el siguiente paso será crear un proyecto de VS2010.

  • Hacer clic en “file->New->Project”.
  • Seleccionar como lenguaje “C++”
  • Utilizar la plantilla “Win32 Console Application”
  • Seleccionar en la parte inferior la localización de donde se situará el proyecto “Location”
  • Establecer el nombre del proyecto en “Name”.
  • En la ventana de bienvenida hacer clic en “Next”.
  • Seleccionar las opciones “Console Application” y “Empty Project” y hacer clic en “finish”.

PASO 4. CONFIGURACIÓN AL PROYECTO

Hacer clic secundario en el nombre del proyecto (No de la solución), en el menú contextual seleccionar “properties”, en la ventana seleccionar de lado izquierdo “Configuration Properties->VC++Directories”, en esta sección incluiremos los directorios necesarios para poder trabajar con OpenCv, dichos directorios son:
  1. C:\OpenCV2.4.0\opencv\build\include este estará incluido en la sección “Include Directories”
  2. C:\OpenCV2.4.0\opencv\build\x86\vc10\lib este estará incluido en la sección “Library Directories”
En esta parte es muy importante tener en cuenta las siguiente consideraciones:
Dentro del directorio de OpenCV encontramos los siguientes subdirectorios:
  • 3rdparty
  • android
  • apps
  • build
  • cmake
  • data
  • doc
  • include
  • ios
  • modules
  • samples

Los directorios “include” y “lib” que se va a usar en el proyecto de VS2010 (Visual Studio 2010) son los que están localizados dentro de “build”.

Con respecto a “lib” debemos tener en cuenta las siguientes consideraciones:
  • Usar x86 cuando se crearán proyectos para arquitecturas de 32 bits.
    • Utiliza vc9 para Vs2008
    • Utilziar vc10 para Vs2010
  • Usar x64 cuando se crearán proyectos para arquitecturas de 64 bits.
    • Utiliza vc9 para Vs2008
    • Utilziar vc10 para Vs2010

PASO 5. CREAR CÓDIGO DE EJEMPLO.

Hacer clic secundario sobre la carpeta “Source Files” del “Solution Explorer”, y agregar un archivo del tipo “cpp” llamado “main_helloFrame”.
Agregar el siguiente código:
 //Main header  
 #include "main_hog.h"  
 //Main Programm  
 void main()  
 {  
      Mat image = imread("C:/Users/RivalcobaDev/Pictures/pedestrian/pixelHand.jpg");  
      namedWindow("Output");  
      imshow("Output",image);  
      cout << "End of porcessing!!" << endl;  
      waitKey(0);  
 }

Tener cuidado en la línea que utiliza la función “imread“, escribir una dirección válida de una imagen en tu CPU, observe que las diagonales son en sentido contrario a las que usa el sistema operativo normalmente para declarar rutas de archivos, esta es una regla que se deberá seguir siempre que se desee declarar rutas de archivos.

Note que en la parte superior hay un “header”, el cual definiremos a continuación.

Hacer clic secundario sobre la carpeta “Header Files” del “Solution Explorer”, seleccionar la opción “Add->New item” y agregar un archivo de tipo “.h” con el nombre “main_helloFrame”.
Agregar los enlaces (links) a las librerias de OpenCv:
#ifndef MAIN_HOG  
#define MAIN_HOG  
//OpenCV Linkers  
#pragma comment(lib, "opencv_core240d.lib")  
#pragma comment(lib, "opencv_highgui240d.lib")  
#pragma comment(lib, "opencv_imgproc240d.lib")  
#pragma comment(lib, "opencv_features2d240d.lib")  
#pragma comment(lib, "opencv_calib3d240d.lib")  
#pragma comment(lib, "opencv_objdetect240d.lib")  
#pragma comment(lib, "opencv_gpu240d.lib")  
#pragma comment(lib, "opencv_video240d.lib")  
//OpenCv sources codes  
#include   
#include   
//Cpp headers  
#include  
//name Spaces  
using namespace std;  
using namespace cv;  
#endif

En primer lugar utilizamos unas directivas de compilador que nos permitirán definir un bloque de código que será creado con la condición de no estar definido anteriormente, en C++ siempre que se estén creando “headers” es muy recomendable englobar todo el código del “Header” mediante esta directiva.Seguido de eso, encontramos otras directivas del compilador llamadas “Pragma”, estas son indispensables para linkear el proyecto con los archivos “.lib” de openCv, sin los cuales sería imposible compilar el proyecto.Posteriormente tenemos los “includes”, en los cuales incluimos las definiciones de los módulos de OpenCV que utilizaremos en el proyecto, los mas importantes son “core.hpp” y “highgui.hpp”.

Terminamos con los espacios de nombres donde estan origanizadas las funciones estándar de C++ (std) y OpenCv (cv).

El “Solution Explorer” debiera verse así:

Compilar y Ejecutar con la función F5 y si todo se ha realizado correctamente el programa lee la imagen del directorio y la muestra en una ventana. Para cerrar el programa presionar cualquier tecla.

14 comentarios

  1. hola estoy haciendo una practica para detectar la humedad temperatura (dht11) y la humedad de suelo con arduino y necesito programarlo con visual Stuido 2010. para presentarlo y me gustaria saber que codigo anexar para que me corra el programa si me pueden ayudar se los agradecere mucho. ya tengo el codigo de arduino pero no se como programarlo con visual me podrian ayudar.

    por su atencion gracias

    • Puedes utilizar la clase Serial de Arduino para enviar la información a la PC, en Visual Studio tienes el componente SerialPort (disponible en cualquier lenguaje .Net) que permite conectarse a un puerto serie para obtener los datos que envíes con Arduino, con eso puedes hacer la comunicación.

  2. Hola, esta configuracion aplica tambien para trabajar con C-Sharp? es que estoy trabajando con C-Sharp en visual studio y necesito configurara open CV.
    Muchas gracias

  3. Estoy iniciando preparativos para trabajar con C# en visual studio, para reconocimiento facial, pensaba que OpenCV me servia :(, gracias por la información. Las librerías que me dices me servirían para trabajar con reconocimiento?.
    Egmu-Cv es como un homologo de OpenCV para C#?

    Te agradezco mucho

  4. Egmu-CV de hecho usa funciones de OpenCV Nativo, con la ventaja de poderlo usar desde la comodidad de C#, imagínate el núcleo de OpenCV sobre el cual hay una capa que expone interfaces invocables desde C#, eso es Egmu-CV, ambas librerías te ofrecen rutinas que te ayudaran al reconocimiento de rostros como lo son: Algoritmos de clasificación, algoritmos de extracción de rasgos importantes, filtros, etc.. Éxito con tu proyecto.

  5. No te imaginas toda la ayuda que me has brindado, Dios te puso en mi camino. Simplemente gracias ya inicié la investigación sobre Egmu-CV.

  6. Hola que tal???
    Estaba siguiendo tu tutorial paso a paso pero al momento de compilar el proyecto se genera el siguiente error:
    “Unable to start the program ‘c:\…..\Name.exe’. The system cannto find the file specified”.
    Por favor te agradecerí mucho si me ayudas a solucionar este error..
    Gracias de antemano y saludos.

    • Saludos, un favor para poder darme una idea de lo que esta ocurriendo podrías especificar, ¿Que versión de Visual studio estas ocupando?, lo que podrías hacer por el momento es crear un hola mundo en C++ y si con un hola mundo el problema se presenta también, lo mas probable es que la instalación de tu Visual tenga algún daño, de todas formas entra a la línea de comandos de visual studio, (búscala en Windows 8 como developer command prompt) y teclea “devenv.exe /resetsettings” esto establecerá la configuración de tu visual studio a su estado inicial.
      Espero esto ayude.

  7. Hola,

    Estoy haciendo un proyecto de fin de carrera con OpenCv, y no consigo que me funcione el ejecutable del programa. Me da un error de este estilo …
    warning: Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:526)

    Me han dicho que puede ser por los codecs del video pero tambien por la configuracion de la librería … Nose muy bien donde preguntarlo alguien me puede ayudar ??

    Muchas Gracias, Un Saludo

    • Para poder apoyarte con este problema me gustaria solicitarte un poco mas de información:
      1. ¿Que versión de OpenCv estas usando?
      2. ¿Puedes mostrar el fragmento de código donde realizas la lectura del video?
      3. ¿Que código de error manda el compilador?

      Saludos.

      • Hola,
        Estoy utilizando la versión 2.4.5
        Leo el vídeo de la siguiente forma :

        // Abrir el video
        cv::VideoCapture capture(“partido1.mp4”);

        El compilador no me manda ningún código de error, el programa no me funciona cuando intento ejecutar el ejecutable el .exe.
        Cuando intento ejecutarlo se abre el cmd y me dice warning: Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:526)

        Si pongo el víde en la misma carpeta del cmd deja de funcionar y se me abre el depurador fallando en la creación de una imagen (IplImage).

        Me han dicho que puedo tener la librería configurada para el release pero la tengo configurada sin las ds de las lib.

        El caso es que nada de esto ocurre si ejecuto con F5 en el Visual Studio normal.

        Gracias por la ayudo, me urge conseguirlo tendría que haberlo entregado hoy…

        Saludos.

        • Si al parecer es problemas con los codecs, intentemos esto: instalando este franework http://www.ffmpeg.org/download.html
          lo registras en el PATH, luego crea un archivo donde solo leas tu mp4 y lo muestres en una pantalla, si funciona, ya se ha resuelto el problema, si no, quizá lo mas conveniente por el tiempo de entrega que requieres es codificar el vídeo en mpeg, el cual soporta nativamente OpenCV. Exito.

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*