OpenCV in Eclipse einrichten



  • Hallo,

    ich bin Einsteiger in C++ und nutze Eclipse als Umgebung und MinGW als Compiler.

    Jetzt habe ich versucht, mit folgendem Tutorial OpenCV in meinem Eclipse-Projekt einzurichten:
    http://share-thevision.blogspot.de/2013/02/opencveclipse-on-windows.html

    Leider wird der inlude-Path sowie der libary search path nicht richtig erkannt. Das sieht man z.B. beim include-Path recht einfach:

    #include "C:/opencv/build/include/opencv2/highgui/highgui.hpp"
    

    gibt keine Fehlermeldung,

    #include "opencv2/highgui/highgui.hpp"
    

    gibt die Fehlermeldung "unresolved inclusion".

    Ansonsten habe ich den Beispielcode im Tutorial komplett übernommen. Hier der komplette Code:

    /*
     * StartWithOpenCV.cpp
     *
     *  Created on: 13.10.2016
     *      Author: re342
     */
    
    //#include "C:/opencv/build/include/opencv2/highgui/highgui.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include <iostream>
    using namespace cv;
    using namespace std;
    int main(int argc, char** argv)
    {
      Mat im = imread(argc == 2 ? argv[1] : "lenna.png", 1);
      if (im.empty())
      {
        cout << "Cannot open image!" << endl;
        return -1;
      }
      imshow("image", im);
      waitKey(0);
      return 0;
    }
    

    Zeile 9 gibt wie bereits gesagt wegen des includes eine Fehlermeldung, Zeile 15, 16 und 21 wahrscheinlich, weil der Libary Search Path auch nicht erkannt wird. Ich habe auch schon versucht, über "File System" den richtigen Pfad einzustellen. Oder die / durch \ zu ersetzen. Nichts hat die Fehler beseitigt.

    Hat jemand eine Idee, wo der Fehler sein könnte? Ich wäre sehr dankbar für jeden Hinweis.

    re342


  • Mod

    Hast du auch den nächsten Absatz im Tutorial gelesen und durchgeführt, der sich mit genau diesen Fehlern und ihrer Behebung auseinander setzt? Die Fehlermeldung deutet nämlich darauf hin, dass der Include-Pfad nicht korrekt gesetzt wurde, was in diesem Teil des Tutorials gemacht wird.



  • Hi

    ist zwar nicht ganz das was du möchtest, aber ich compiliere OpenCV Code einfach wie folgt:

    .PHONY: all
    
    GXX := g++ 
    GXXFLAGS := -c -g -Wall -std=c++14 `pkg-config --cflags opencv`
    LDFLAGS := -g  
    LIBS = `pkg-config --libs opencv`
    objs := $(patsubst %.cpp,%.o,$(wildcard *.cpp))
    deps := $(objs:.o=.d)
    
    all: ProgrammNameMain
    
    -include $(deps)
    
    ProgrammNameMain: $(objs) 
    	$(GXX) $(LDFLAGS) $(LIBS) -o $@ $^
    
    %.d: %.cpp
    	$(GXX) -MM -MT "$@ $(patsubst %.d,%.o,$@)" -MF $@ $< 
    
    %.o: %.cpp
    	$(GXX) $(GXXFLAGS) $<
    

    Deine main trägt hier natülich den Namen ProgrammNameMain.

    Macht so viel mehr Spaß wie ich finde 🙂

    Grüße



  • Hallo,

    danke für die Antworten.

    @SeppJ
    Ich habe das Tutorial komplett gelesen.
    Als include-Path habe ich

    "C:\opencv\build\include"
    

    .
    Als Libary Search Path habe ich

    "C:\opencv\build\x86\vc12\lib"
    

    .

    Ich wüsste jetzt nicht, was daran falsch ist. Zumal der Import mit dem kompletten Dateipfad ja akzeptiert wird.

    @cpp_Jungspund
    Wo in eclipse muss ich deinen Code eingeben, damit der Compiler das ausführt?

    VG, re342





  • Hallo,

    mit dem Makefile hat es leider auch nicht geklappt.

    Bei dem Weg über die eclipse-Einstellungen habe ich inzwischen selber herausgefunden, wie die Includes richtig hinzugefügt werden können:

    Rechte Maustaste auf Projekt -> Properties -> C/C++ General -> Path and Symbols -> Includes
    Pfad C:\opencv\build\include hinzufügen. "Add to all configurations" und "Add to all languages" auswählen.

    Dadurch sind die Fehlermeldungen, die an der Seite angezeigt wurden, weggegangen.

    Die Libaries werden im selben Menü unter Libaries korrekt angezeigt, genauso wie auch unter Properties -> C/C++ Build -> Settings.

    Hier mal ein Screenshot:
    http://fs5.directupload.net/images/161013/px2m34u4.png

    Wenn ich aber das Projekt baue, werden die Libaries leider nicht richtig gelinkt. Ich habe es wie folgt gemacht:
    Rechte Maustaste auf Projekt -> Build Project

    Dabei kam es zu folgender Ausgabe in der Konsole:

    18:14:59 **** Incremental Build of configuration Release for project Test2 ****
    Info: Internal Builder is used for build
    g++ "-LC:\\opencv\\build\\x86\\vc12\\lib" "-LC:\\opencv\\build\\x86\\vc11\\lib" -o Test2.exe "src\\Test2.o" -lopencv_highgui2413 -lopencv_imgproc2413 -lopencv_ml2413 -lopencv_core2413 
    src\Test2.o:Test2.cpp:(.text$_ZN2cv3MatD1Ev[__ZN2cv3MatD1Ev]+0x14): undefined reference to `cv::Mat::deallocate()'
    src\Test2.o:Test2.cpp:(.text$_ZN2cv3MatD1Ev[__ZN2cv3MatD1Ev]+0x64): undefined reference to `cv::fastFree(void*)'
    src\Test2.o:Test2.cpp:(.text.startup+0x63): undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
    src\Test2.o:Test2.cpp:(.text.startup+0xa9): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
    src\Test2.o:Test2.cpp:(.text.startup+0xd4): undefined reference to `cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)'
    src\Test2.o:Test2.cpp:(.text.startup+0xef): undefined reference to `cv::waitKey(int)'
    collect2.exe: error: ld returned 1 exit status
    
    18:14:59 Build Finished (took 193ms)
    

    Die Fehler deuten darauf hin, dass die Libaries irgendwie noch nicht richtig gelinkt werden konnten. Wahrscheinlich muss in Eclipse noch irgendwo der Pfad oder die Libaries ergänzt werden. Ich konnte aber bisher nicht herausfinden, wo. Habt ihr eine Idee, woran es liegen könnte? Ich habe schon viel probiert, bin aber nicht viel weiter gekommen...

    Danke und viele Grüße,
    re342



  • Die Pfade reichen, um die angegebenen Bibliotheken zu finden. Fehlt noch eine? 32/64 Bit gemischt? Bibliotheken mit einem anderen Compiler übersetzt?



  • Ich habe jetzt sowohl die 32 bit Version, als auch die 64 bit Version probiert. Überall der gleiche Fehler. Ich habe auch die Version 3.1 von OpenCV (anstelle von 2.4.13) versucht, da gibt es nur noch eine Bibliothek. Auch da wieder der gleiche Fehler. Es liegt dann wohl am Compiler, wobei das Tutorial (sowie auch ein weiteres) MinGW empfohlen hat.



  • re342 schrieb:

    mit dem Makefile hat es leider auch nicht geklappt.

    Was für ein OS und was für eine Version von make ist installiert? Was kommt wenn du das Makefile startest für eine Meldung?

    Grüße



  • Hallo,

    make ist in MinGW enthalten. Das habe ich unter folgendem Link heruntergeladen:
    https://sourceforge.net/projects/mingw/files/Installer/

    Ich habe über Eclipse ein Makefile-Projekt erstellt und anschließend die bereits erwähnte Test2.cpp sowie eine Datei make als Makefile angelegt, wobei ich "ProgrammNameMain" durch "Test2" ersetzt habe.

    Wenn ich auf Build Project gehe, kommt folgende Fehlermeldung:

    11:47:00 **** Build of configuration Default for project Test2 ****
    make all 
    make: *** No rule to make target `all'.  Stop.
    
    11:47:00 Build Finished (took 297ms)
    

    Mein OS ist Windows 10 (64 Bit).

    VG und danke für die Hilfe.



  • Hallo,

    ich habe das Problem inzwischen selber gelöst bekommen. Der Fehler war, dass OpenCV nicht mit MinGW, sondern für Visual C++ kompiliert war. Nach dieser Anleitung habe ich OpenCV mit MinGW kompiliert. Danach habe ich die neu kompilierten Libaries in Eclipse hinzugefügt und danach "Clean Project" durchgeführt. Danach gab es bei "Build Project" keine Fehler mehr und das Testprogramm funktionierte.

    Trotzdem danke für eure Hilfe!

    re342


Anmelden zum Antworten