OpenCV 2.0 + Eclipse en Windows

Aquí dejo las sencillas instrucciones a seguir para quién quiera empezar a probar OpenCV. Para los que no lo sepan, OpenCV es un conjunto de librerías abiertas, mantenidas en gran parte por Intel, que nos ayudan a realizar tareas de visión artificial.

En GNU/Linux no debería de haber problemas con la instalación, pero en Windows me costado un poquito hasta que lo he tenido todo funcionando, y como no lo he encontrado en ninguna página, lo dejo aquí puesto.

Lo primero será descargar la versión de Eclipse preparada para C/C++, es lo mismo que si instalamos el IDE sin nada más y luego la parte del proyecto CDT. La forma fácil es ir a http://www.eclipse.org/downloads/packages/ y seleccionar "Eclipse IDE for C/C++ developers". La instalación es simple, descomprimir y listo.

Lo segundo que tendremos que instalar es MinGW. Se trata de un entorno que nos permitirá usar las utitlidades de compilación de GNU bajo Windows. El problema es que actualmente, la versión estable de MinGW usa gcc 3.4.x y para poder compilar usando las librerías de OpenCV 2.0 necesitaremos una versión más actual de GCC. Para ello la solución fácil es descargar el "TDM's GCC/MinGW32 build", que no es más que una versión alternativa con la versión 4.4.x de GCC y sus utilidades. Nos aseguraremos de desmarcar la casilla del make, ya que lo instalaremos como parte de otro paquete.

Ahora tendremos que instalar MSYS. Es un conjunto de herramientas que nos permitirá tener una consola simlar a la que tendríamos en GNU/Linux. Podremos además invocar a las herramientas más habituales de GNU, como make. Para ello vamos a http://sourceforge.net/projects/mingw/files/ y seleccionamos "MSYS Base System -> Current Release xxxx -> MSYS-xxxx.exe" y nos lo descargamos. Para instalarlo simplemente seguir el proceso de instalación. Al final si se nos abre una terminal preguntando, le respondemos y y pulsamos intro, después nos preguntará la ruta de MinGW pero con la barra hacia delante (/), en mi caso he puesto c:/mingw. Tras esto finalizará la instalación.

Nos queda instalar OpenCV, para ello simplemente desde su página web descargamos el instalador para Windows. En mi caso he desmarcado la casilla de "Source" ya que no me interesa.

Ya tenemos todo instalado, ahora abriremos Eclipse. Cuando se abra nos preguntará por el directorio de trabajo, simplemente le damos a Ok y seguimos. Si es la primera vez que lo ejecutamos, saldrá una pantalla de bienvenida, simplemente cerramos esa pestaña. Después nos vamos a "File->New->C++ Project" y se nos abrirá el asistente de proyectos. Le ponemos un nombre a nuestro proyecto y seleccionamos "Empty Project" de la lista. Como toolchain debemos seleccionar MinGW y pulsamos Next. En el siguiente diálogo pulsamos sobre el botón de "Advanced settings". En esta nueva ventana tendremos que seleccionar "GCC G++ Compiler -> Directories -> Include paths (-I)" y pulsar el botón de añadir. Seleccionamos "File system" y elegimos el directorio include/opencv que está dentro del directorio donde instalásemos OpenCV. En "MinGW C++ Linker -> Libraries -> Libraries (-l)" añadiremos las palabras highgui200, cv200 y cxcore200. Debajo en "Library search path (-L)" seleccionamos el directorio lib que está dentro de donde instalásemos OpenCV. Pulsamos en OK y Finish.

 

 

Ahora deberíamos de ver nuestro proyecto abierto a la izquierda y debería de estar listo para compilar. Haremos una prueba para ver que todo funciona, pulsamos con el botón derecho sobre el nombre del proyecto y seleccionamos "New -> Source folder", le ponemos de nombre src. Luego de la misma forma creamos un nuevo fichero de código en este directorio, le llamamos main.cpp. Ahí copiarémos el siguiente código de ejemplo:

////////////////////////////////////////////////////////////////////////
//
// hello-world.cpp
//
// This is a simple, introductory OpenCV program. The program reads an
// image from a file, inverts it, and displays the result.
//
////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>

int main(int argc, char *argv[])
{
IplImage* img = 0;
int height,width,step,channels;
uchar *data;
int i,j,k;

if(argc<2){
printf("Usage: main <image-file-name>\n\7");
exit(0);
}

// load an image
img=cvLoadImage(argv[1]);
if(!img){
printf("Could not load image file: %s\n",argv[1]);
exit(0);
}

// get the image data
height    = img->height;
width     = img->width;
step      = img->widthStep;
channels  = img->nChannels;
data      = (uchar *)img->imageData;
printf("Processing a %dx%d image with %d channels\n",height,width,channels);

// create a window
cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
cvMoveWindow("mainWin", 100, 100);

// invert the image
for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)
data[i*step+j*channels+k]=255-data[i*step+j*channels+k];

// show the image
cvShowImage("mainWin", img );

// wait for a key
cvWaitKey(0);

// release the image
cvReleaseImage(&img );
return 0;
}

Guardamos el fichero y pulsamos en el icono de compilar . Abajo nos indicará si hay algún problema o si todo ha ido correctamente. En caso de que todo haya ido bien, podremos probar el ejemplo, para ello primero tendremos que copiar una imagen al proyecto y después pulsar en botón de Run . Saldrá debajo el texto "Usage: main <image-file-name>", para solucionarlo pulsamos en la flechita de la derecha del icono de Run, y elegimos Run configurations, después seleccionamos la pestaña de Arguments y escribimos en el cuadro de texto el nombre de la imagen que hallamos copiado al proyecto, guardamos y volvemos a ejecutar.

Esto es todo, ahora ya solo queda buscar un buen libro o tutorial y empezar a probar con nuestro entorno de desarrollo.

Muy Buen Tuto, me sirvio al

Imagen de Anónimo

Muy Buen Tuto, me sirvio al pelo, ya me estaba enredando poque no me compilaba en devcpp ahora ya entiendo, muchas gracias

No entiendo para que

Imagen de Anónimo

No entiendo para que desgastarse instalandolo en windows, con la excepción de los alienados programadores de .Net que sufrieron un terrible lavado cerebral, no conozco ningun programador serio que use windows. empezando porque compilar es una pesadilla sobre esa plataforma.

Muy a mi pesar, OpenCV va

Imagen de Anónimo

Muy a mi pesar, OpenCV va mejor en windows que en linux. Haz pruebas de timings y verás... Yo me he visto obligado a usar windows para un proyecto OpenCV.

Un buen programador va más

Imagen de Anónimo

Un buen programador va más hayá de un sistema operativo, y el mayor beneficio del software libre, de los foros públicos, de las comunidades, etc. Es que cada uno tiene la oportunidad de elegir y de compartir si así lo desea.

¿Por qué perderlo con mensajes tan cuadrados?

Hola!. Todo me ha ido sobre

Imagen de Anónimo

Hola!. Todo me ha ido sobre ruedas pero me gustaría hacerte un par de preguntas, ya que llevo mucho tiempo programando en Linux pero en windows hay algunas cosas aún que me chocan, 1º Para que es necesario exactamente el MSYS ? 2º Has probado este proceso con VS2008 Express ? Parece ser que son necesarios los ficheros .lib de las librerías que no vienen en el paquete instalable de OpenCV 2.0 para windows.

Hola! Solo agradecerte el

Imagen de Anónimo

Hola! Solo agradecerte el tutorial que me ha ayudado muchisimo, ya me estaba volviendo loco para compilar un HelloWorld con OpenCV!! Muchisimas gracias!! :)

Gracias por publicar el

Imagen de Anónimo

Gracias por publicar el tutorial. Me sirvio de ayuda para trabajar con QT creator y Opencv. En la instalacion solo hice dos cosas diferentes: primero que al instalar tdm-mingw, deje marcada la casilla del make ya que qt no trae su propio make, y segundo es que como en qt los includes se hacen editando el archivo .pro dentro del proyecto, solo le agregue las siguientes lineas al final de dicho archivo:

LIBS += -L C:\OpenCV2.0\lib \ -lpsapi -lhighgui200 -lcv200 -lcxcore200 INCLUDEPATH += C:\OpenCV2.0\include\opencv

y listo, todo corre excelente. Muchas gracias por tu aporte, sin el no hubiera podido usar el opencv con QT.

en mi mensaje anterior las

Imagen de Anónimo

en mi mensaje anterior las lineas no salieron como deben ser, aqui las corrijo como las coloque en el archivo .pro para que funcionen correctamente en el QT:

LIBS += -L C:\OpenCV2.0\lib \

-lpsapi -lhighgui200 -lcv200 -lcxcore200

INCLUDEPATH += C:\OpenCV2.0\include\opencv

 

Ante todo muchas gracias por

Imagen de Anónimo

Ante todo muchas gracias por publicar este tutorial, me ha servido para poder trabajar con opencv. El tema esque tambien me gustaria incorporar Qt pero no soy capaz , he visto que S&R lo ha conseguido. Me gustaria que especificase un poco mas como hacerlo funcionar todo junto , muchas gracias de ante mano!! :)

Me marca un error diciendo

Imagen de Anónimo

Me marca un error diciendo que cvloadimage no se encuentra en la libreria dinamica, y estoy seguro de que la incluí en en link. Espero me puedan ayudar

Muchas gracias por el post,

Imagen de Anónimo

Muchas gracias por el post, me sirvió para echar a andar openCV.

Por si alguno se pierde con la instalación donde dice "En el siguiente diálogo pulsamos sobre el botón de "Advanced settings". En esta nueva ventana tendremos que seleccionar "GCC G++ Compiler -> Directories "

Dentro de Advanced setting, a la izquierda seleccionar C/C++ Build / Setting. En ese menú es donde se puede seleccionar "GCC G++ Compiler -> Directories " :)

Buen día. Hmm... de verdad

Imagen de Anónimo

Buen día.

Hmm... de verdad que he seguido todos los pasos que acá me indican, pero cuando voy a compilar el archivo de ejemplo me aparece el siguiente error:

"undefined reference to `WinMain@16'"

Y no tengo idea de qué hacer con esto. Les pido ayuda con este problema.

Gracias.

g++ -O3 -Wall -c

Imagen de Anónimo

g++ -O3 -Wall -c -fmessage-length=0 -osrc\main.o ..\src\main.cpp ..\src\main.cpp:19:16: error: cv.h: No such file or directory ..\src\main.cpp:20:21: error: highgui.h: No such file or directory Mi problema es más sencillo, o eso espero. Evidentemente no veo los paquetes cv.h y restante. El tema es que al seguir los pasos me da esto. Alguna ayudita?

Nada, no hagais caso al post

Imagen de Anónimo

Nada, no hagais caso al post anterior. La solución ha sido configurar el GCC C++ Compiler, y no el que estaba configurando, el GCC C Compiler.

Fallo estrepitoso, ahora mismo me funciona todo correctamente. Sois unos cracks.

descargue el TDM mingw y en

Imagen de Anónimo

descargue el TDM mingw y en ningun lugar me daba la opcion de instalar o no el make.

MSYS no encontraba la ruta que le indicaba (y lo hice 10 veces para asegurarme de haberlo escrito bien)

intente d configurarlo manualmente pero no se si funciono.

a la hora de compilar el ejemplo me dice error en casi todas las lineas (comenzando por los include cv.h y highgui.h)

alguna AYUDA?!?!?!

A mi me pasaba lo mismo, pero

Imagen de Anónimo

A mi me pasaba lo mismo, pero es solo una mala configuración.

1- Para descargar MSYS esta es el link:

http://downloads.sourceforge.net/mingw/MSYS-1.0.11.exe

 

2- Para desactibar el MAKE en la instalacion de TDM no dice explicitamente make, dice :

MinGW32-Make

este tenes que dehabilitar.

3- Las librerias (cv.h,..., etc ) no las encuentra porque seguramente pusiste mal el nombre en opciones del linker de MinGW.

Lo que tienes que hacer es lo siguiente:

-  dentro de Propiedades del Proyecto vas asta:

Settings -> C/C++ Build -> GCC C++ Compiler -> Includes y agregas la ruta donde estan los Includes del opencv. En mi caso yo agregue:

C:\Program Files\OpenCV\include\opencv

- dentro de Propiedades del Proyecto vas asta: Settings -> C/C++ Build -> MinGW C++ Linker -> Libraries

y agregas en Libraries -L: cvXXX  highguiXXX cxcoreXXX

donde XXX es la version del OpenCV. Por ejemplo yo tendo la version 2.10 entonces lo agregue con estos nobres: cv210  highgui210 cxcore210.

Por ultimo en Library search path (-L) agregas la direccion donde estan las ñibrerias instaladas del opencv.

en mi caso yo le puse:

C:\Program Files\OpenCV\lib"

 

Con esto te tendria que estar funcionando todo.

En mi caso me aparece un

Imagen de Anónimo

En mi caso me aparece un error que contiene esto “__exchange_and_add” para solucionarlo hice lo siguiente:

modifique la librería “cxoperations.hpp” que se encuentra en “\include\opencv” buscar la sección de líneas 67-68 en OpenCv 2.0:

#else

#include

#if __GNUC__ >= 4

Y actualizarlo para hacer referencia a la nueva definición _MINGW32_:

#else

#include

#if __GNUC__ >= 4 || __MINGW32__

segun yo hice todo

Imagen de Anónimo

segun yo hice todo correctamentee pero a la hora de compilarlo me marca un error:

undefined reference to ¨WinMain@16¨.

que estoy haciendo mal???

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente. If you have a Gravatar account, used to display your avatar.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato