2012-03-19 3 views
5

Per una settimana ho avuto difficoltà con la compilazione di programmi openCV. Ho provato tutto ciò che potrei trovare su internet.Compilare programmi openCV 2.3.1 con MinGW gcc/g ++ su Windows 7 64bit

Quello che ho fatto è: ho scaricato OpenCV-2.3.1-win-superpack.exe e seguito this official installation guide.

Nella CMake (gui) la mia fonte era: D: \ opencv e la destinazione di costruzione era: C: \ opencv.

Ho anche aggiunto C: \ opencv \ install \ bin; C: \ opencv \ bin alla variabile PATH del mio sistema.

Quello che voglio è compilare i programmi openCV sul mio sistema operativo Windows usando i compilatori gcc/g ++ di MinGW.

Ho provato vari parametri gcc/g ++ che ho trovato su Internet e giorni giocando con le opzioni -I e -L il compilatore non può mai trovare le funzioni o le strutture openCV.

Quello che sto cercando di compilare:

#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; 
} 

Errore:

ingresso:

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

uscita:

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

O con g ++:

ingresso:

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

uscita:

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

Nota a margine: si tenta di compilare in VS2005 ottengo lo stesso errore.

Grazie per il vostro tempo!

risposta

0

Si ha la directory, C:\opencv\install\bin, per individuare le librerie sulla riga di comando gcc/g++, ma penso che sarà anche necessario specificare le librerie da utilizzare come input del linker. Io non sono sicuro di quello che le biblioteche sono parte della distribuzione OpenCV, ma andando con l'esempio sulla pagina di istruzioni si è collegato al, uno potrebbe essere:

-lopencv_calib3d220.dll 

Probabilmente dovrete aggiungere uno o più altri quelli (che segue il modello nome lib*.a nella directory C:\opencv\install\bin - o forse qualche altra directory lib che si dovrebbe passare in un'opzione -L).

+0

Ci scusiamo per il ritardo. Ho provato tutto e non sarà ancora compilato. Mi sono spostato su Python anziché su C/C++ e tutto ora funziona. Grazie per il suggerimento pensato! –

5

Nel caso in cui qualcun altro ha bisogno di risolvere questo problema, ecco come ho ottenuto il codice di esempio OpenCV/HighGUI pubblicato per compilare in Windows 7 x64 usando MinGW, MSYS e CMake:

  1. accumulo OpenCV dai sorgenti utilizzando MinGW/MSYS/CMake.Questo perché non ho potuto ottenere la versione compilata MinGW in OpenCV-win-SuperPack per collegarsi correttamente in MinGW/MSYS/Windows 7 x64.

    Per riferimento completo, ecco come ho compilato OpenCV:

    • assicurarsi di avere un up-to-date CMake (v2.6 o successivo) e MinGW (con GCC, G ++, e le opzioni di MSYS) installato
    • se si desidera il nuovo front-end OpenCV HighGUI basato su Qt, sarà necessario installare Qt 4 (SDK).
    • scaricare una versione di fonte OpenCV/Superpack 2.2 o versioni successive (io ho usato OpenCV-2.3.1-win-superpack.exe)
    • decomprimere il contenuto di [OPENCV_SOURCE_DIR] (ho messo in C:/OpenCV, quindi non c'è dovrebbe essere un file in C:/OpenCV/README per esempio)
    • creare una directory [OPENCV_BUILD_DIR] altrove (io ho usato C:/OpenCV/build/mingw)
    • utilizzare lo strumento CMake-GUI, specificare la directory di origine come [OPENCV_SOURCE_DIR], la directory di compilazione come [OPENCV_BUILD_DIR], e fai clic su "Configura".
    • si potrebbe desiderare/bisogno di modificare le opzioni (ad esempio ho spuntato le voci "Qt" e "Qt-OpenGL", quindi di nuovo "Configura", quindi ho dovuto fornire il percorso dell'eseguibile qmake)
    • una volta aver completato la configurazione OpenCV, fare clic su "Generate"
    • in un terminale MSYS, selezionare [OPENCV_BUILD_DIR], ed eseguire "make" per costruire il codice (puo 'richiedere del tempo)
    • una volta che il è stato costruito correttamente, esegui "make install", che raccoglie il codice/le librerie/include le cartelle incorporate nella cartella [OPENCV_BUILD_DIR]/install (o una cartella diversa se hai cambiato l'opzione corrispondente quando usi lo strumento CMake-GUI)
    • aggiungere la cartella [OPENCV_BUILD_DIR]/install/bin alla variabile ambientale PATH. Se non sai come fare, ti consiglio di utilizzare lo strumento GUI di Path Editor.
    • se si finisce con Qt, sarà inoltre necessario inserire la cartella bin di Qt SDK nella variabile ambientale PATH. Questa è la cartella che include qmake.exe.
  2. inserire il seguente codice di esempio in un file denominato test.c. Ho modificato leggermente l'inclusione per renderli compatibili con OpenCV v2.2 e versioni successive.

    #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. in un terminale MSYS, passare alla cartella dove avete messo test.c, ed eseguire:

    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] 
    

    Così nel mio 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 per utenti Linux. Una nuova versione di OpenCV potrebbe essere trovata nel repository, potrebbe non esserci alcuna necessità di scaricare fonti e renderle. Il mio comando di compilazione sta seguendo: 'gcc main.c -lopencv_core -lopencv_imgproc -lopencv_highgui -lm'. Come vedi, non sono necessarie cifre finali. –

+0

Manca il passo Ome: in CMake cosa dovrebbe essere selezionato durante la configurazione? Makefile MSYS? Makefile MinGW? –