Kompilere openCV 2.3.1 programmer med MinGW gcc/g ++ på Windows 7 64bit

Indlæg af Hanne Mølgaard Plasc

Problem



I en uge har jeg kæmpet for at udarbejde openCV-programmer. Jeg har prøvet alt, hvad jeg måske kunne finde på internettet.


Hvad jeg gjorde er: Jeg har downloadet OpenCV-2.3.1-win-superpack.exe og fulgt denne officielle installationsvejledning. [17] [18]


I CMake (gui) var min kilde: D: \ opencv og bygge destination var: C: \ opencv.


Jeg har også tilføjet C: \ opencv \ install \ bin; C: \ opencv \ bin til min systemets PATH-variabel.


Hvad jeg vil, er at kompilere openCV-programmer på mit Windows OS ved hjælp af MinGWs gcc/g ++ compilers.


Jeg har forsøgt forskellige gcc/g ++ parametre, som jeg har fundet på internettet og dage med at spille med -I og -L muligheder kompilatoren kan aldrig finde openCV-funktionerne eller strukturerne.


Hvad jeg forsøger at kompilere:


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


Fejl:


Input :


gcc test.c -o test -I"C:opencvinstallinclude" -I"C:opencvinstallincludeopencv" -L"C:opencvinstallin"


Output :


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


Eller med g ++:


Input :


g++ test.c -o test -I"C:opencvinstallinclude" -I"C:opencvinstallincludeopencv" -L"C:opencvinstallin"


Output :


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


Side note: forsøger at kompilere i VS2005 Jeg får den samme fejl.


Tak for din tid!

Bedste reference


Hvis nogen andre skal løse dette problem, så har jeg fået den udgivne OpenCV/HighGUI-prøvekode til at kompilere i Windows 7 x64 ved hjælp af MinGW, MSYS og CMake:



  1. opbygger OpenCV fra kilde ved hjælp af MinGW/MSYS/CMake. Dette skyldes, at jeg ikke kunne få MinGW-kompilerede version i OpenCV-win-SuperPack til at linke korrekt i MinGW/MSYS/Windows 7 x64.


    For fuld reference, her er hvordan jeg kompilerede OpenCV:



    • Kontroller, at du har en opdateret CMake (v2.6 eller nyere) og MinGW (med GCC, G ++ og MSYS-indstillinger) installeret

    • Hvis du vil have den nye Qt-baserede OpenCV HighGUI front-end, skal du installere Qt 4 (SDK).

    • Download en OpenCV source/superpack version 2.2 eller nyere (jeg brugte OpenCV-2.3.1-win-superpack.exe)

    • Pak indholdet til [[OPENCV\_SOURCE\_DIR]] (jeg sætter det i C:/opencv, så der skal være en fil på C:/opencv/README for eksempel)

    • oprette et [[OPENCV\_BUILD\_DIR]] bibliotek andetsteds (jeg brugte C:/opencv/build/mingw)

    • Brug værktøjet CMake-GUI, angiv kildekataloget som [[OPENCV\_SOURCE\_DIR]], build-mappen som [[OPENCV\_BUILD\_DIR]] og klik på 'Configure'.

    • Du kan ønske/skal tilpasse mulighederne (fx jeg krydsede 'Qt' og 'Qt-OpenGL' -indgavene, og klik derefter på 'Konfigurer' igen og derefter skulle vejen til qmake eksekverbar)

    • Når du er færdig med at konfigurere OpenCV, skal du klikke på 'Generer'

    • i en MSYS-terminal, browse til [[OPENCV\_BUILD\_DIR]] og kør 'make' for at opbygge koden (dette kan tage et stykke tid)

    • Når den er bygget korrekt, skal du køre 'make install', som samler den indbyggede kode/biblioteker/inkludere dirs i [[OPENCV\_BUILD\_DIR]]/installer mappe (eller en anden mappe, hvis du ændrede den tilsvarende indstilling, når du bruger CMake-GUI værktøj)

    • Tilføj [[OPENCV\_BUILD\_DIR]]/install/bin-mappen til PATH-miljøvariablen. Hvis du ikke ved, hvordan du gør dette, anbefaler jeg at bruge GUI-værktøjet til path editor.

    • Hvis du ender med at bruge Qt, skal du også lægge bin-mappen til Qt SDK i PATH-miljøvariablen. Dette er den mappe, der indeholder qmake.exe.


  2. Indsæt følgende prøvekode i en fil, der hedder test.c. Jeg ændrede den indeholder lidt for at gøre dem kompatible med OpenCV v2.2 og derover.


     #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. i en MSYS-terminal, skal du søge i mappen, hvor du lægger test.c og køre:


    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]
    


    Så i mit tilfælde:


    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
    



Vejredaktør: http://www.redfernplace.com/software-projects/patheditor/[19]

Andre referencer 1


Du har mappen C:opencvinstallin for at finde biblioteker på kommandolinjen gcc/g++, men jeg tror også, du skal angive biblioteker til brug som linkerindgange også. Jeg er ikke sikker på, hvilke biblioteker der er en del af OpenCV-distributionen, men det går ud på eksemplet på instruktionssiden, du linkede til. Det kan være:


 -lopencv\_calib3d220.dll


Du skal nok tilføje en eller flere andre (der følger navnemønsteret lib*.a i C:opencvinstallin -kataloget - eller måske en anden lib -katalog, som du skal bestå i en [[-L mulighed).