2012-03-19 18 views
5

Durante una semana he estado luchando con la compilación de programas openCV. He intentado todo lo que podría encontrar en Internet.Compilación de programas openCV 2.3.1 con MinGW gcc/g ++ en Windows 7 64bit

Lo que hice fue: he descargado OpenCV-2.3.1-win-superpack.exe y seguí this official installation guide.

En el CMake (gui) mi fuente era: D: \ opencv y el destino de compilación era: C: \ opencv.

También he agregado C: \ opencv \ install \ bin; C: \ opencv \ bin a la variable PATH de mi sistema.

Lo que quiero es compilar programas openCV en mi sistema operativo Windows usando los compiladores gcc/g ++ de MinGW.

He intentado varios parámetros gcc/g ++ que he encontrado en Internet y días jugando con las opciones -I y -L el compilador nunca puede encontrar las funciones o estructuras de openCV.

Lo que estoy tratando de compilar:

#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 
#include <cv.h> 
#include <highgui.h> 

int main(int argc, char *argv[]) 
{ 
    // Nothing but create a window 
    cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
    cvMoveWindow("mainWin", 100, 100); 
    cvWaitKey(0); 
    return 0; 
} 

error:

entrada:

gcc test.c -o test -I"C:\opencv\install\include" -I"C:\opencv\install\include\opencv" -L"C:\opencv\install\bin" 

salida:

...\ccK4MfHv.o:test.c:(.text+0xa0b): undefined reference to `cvFree_' 

O con g ++:

entrada:

g++ test.c -o test -I"C:\opencv\install\include" -I"C:\opencv\install\include\opencv" -L"C:\opencv\install\bin" 

salida:

...\ccXCTKa1.o:test.c:(.text+0x1e): undefined reference to `cvNamedWindow' 

Nota al margen: intentar compilar en VS2005 consigo el mismo error.

¡Gracias por su tiempo!

Respuesta

0

Tiene el directorio, C:\opencv\install\bin, para buscar bibliotecas en la línea de comandos gcc/g++, pero creo que también necesitará especificar las bibliotecas para usar también como entradas del enlazador. No estoy seguro de lo que las bibliotecas son parte de la distribución de OpenCV, pero va por el ejemplo de la página de instrucciones se enlazó a, uno podría ser:

-lopencv_calib3d220.dll 

Es probable que tenga que añadir uno o más otros (que sigue el patrón de nombre lib*.a en el directorio C:\opencv\install\bin - o tal vez algún otro directorio lib que debe pasar en una opción -L).

+0

Disculpa la demora. Lo intenté todo y todavía no compilará. Me mudé a Python en lugar de C/C++ y todo funciona ahora. ¡Gracias por la sugerencia pensada! –

5

En caso de que alguien más tiene que resolver este problema, aquí es como conseguí el código de ejemplo OpenCV/HighGUI publicado compilar en Windows 7 x64 utilizando MinGW, MSYS, y CMake:

  1. acumulación OpenCV de la fuente usando MinGW/MSYS/CMake.Esto se debe a que no pude obtener la versión compilada de MinGW en OpenCV-win-SuperPack para vincularla correctamente en MinGW/MSYS/Windows 7 x64.

    Para tener una referencia completa, así es como he recopilado OpenCV:

    • asegurarse de que tiene una puesta al día CMake (v2.6 o posterior) y MinGW (con GCC, G ++, y las opciones de Msys) instalado
    • si quiere el nuevo front-end OpenCV HighGUI basado en Qt, necesitará instalar Qt 4 (SDK).
    • descargar una versión de fuente OpenCV/Superpack 2.2 o posterior (utilicé OpenCV-2.3.1-ganar-superpack.exe)
    • descomprimir el contenido en [OPENCV_SOURCE_DIR] (I puse en C:/OpenCV, así que hay debe ser un archivo en C:/OpenCV/README por ejemplo)
    • cree un directorio [OPENCV_BUILD_DIR] en otro lugar (utilicé C:/OpenCV/build/MinGW)
    • utilizar la herramienta CMake en GUI, especifique el directorio de origen como [OPENCV_SOURCE_DIR], el directorio de compilación como [OPENCV_BUILD_DIR], y haga clic en "Configurar".
    • puede desear/necesidad de ir ajustar las opciones (por ejemplo, que cumplía "Qt" y las entradas "Qt-OpenGL", a continuación, hace clic en "Configuración" de nuevo, luego tuvo que proporcionar la ruta al ejecutable de qmake)
    • vez haya terminado de configurar OpenCV, haga clic en "Generar"
    • en un terminal MSYS, vaya a [OPENCV_BUILD_DIR], y ejecutar "make" para construir el código (esto puede tomar un tiempo)
    • una vez que la ha construido correctamente, Ejecute "make install", que recopila el código/bibliotecas/include dirs integrados en [OPENCV_BUILD_DIR]/install folder (o una carpeta diferente si cambió la opción correspondiente cuando usa la herramienta CMake-GUI)
    • agregue la carpeta [OPENCV_BUILD_DIR]/install/bin a la variable de entorno PATH. Si no sabe cómo hacerlo, le recomiendo usar la herramienta GUI de Path Editor.
    • si termina utilizando Qt, también deberá colocar la carpeta bin de Qt SDK en la variable de entorno PATH. Esta es la carpeta que incluye qmake.exe.
  2. pon el siguiente código de muestra en un archivo llamado test.c. Modifiqué el incluye ligeramente para hacerlos compatibles con OpenCV v2.2 y superior.

    #include <stdlib.h> 
    #include <stdio.h> 
    #include <math.h> 
    #include <opencv/cv.h> 
    #include <opencv/highgui.h> 
    
    int main(int argc, char *argv[]) 
    { 
        // Nothing but create a window 
        cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
        cvMoveWindow("mainWin", 100, 100); 
        cvWaitKey(0); 
        return 0; 
    } 
    
  3. en un terminal MSYS, vaya a la carpeta donde se pone test.c, y ejecute:

    gcc -o test -I"[OPENCV_BUILD_DIR]/install/include" test.c \ 
        -L"[OPENCV_BUILD_DIR]/install/lib" \ 
        -lopencv_core[OPENCV_VERSION] \ 
        -lopencv_imgproc[OPENCV_VERSION] \ 
        -lopencv_highgui[OPENCV_VERSION] 
    

    Así que en mi caso:

    gcc -o test -I"/c/opencv/build/mingw/install/include" test.c \ 
        -L"/c/opencv/build/mingw/install/lib" \ 
        -lopencv_core231 
        -lopencv_imgproc231 
        -lopencv_highgui231 
    

Path Editor: http://www.redfernplace.com/software-projects/patheditor/

+0

Una nota para usuarios de Linux. Puede encontrar una versión nueva de OpenCV en su repositorio, es posible que no haya necesidad de descargar las fuentes y hacerlas. Mi comando de compilación es el siguiente: 'gcc main.c -lopencv_core -lopencv_imgproc -lopencv_highgui -lm'. Como ve, no se necesitan dígitos finales. –

+0

Ome paso falta: en CMake ¿qué se debe seleccionar durante la configuración? MSYS Makefiles? MinGW Makefiles? –

Cuestiones relacionadas