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.htmlLeider 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
-
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.pngWenn ich aber das Projekt baue, werden die Libaries leider nicht richtig gelinkt. Ich habe es wie folgt gemacht:
Rechte Maustaste auf Projekt -> Build ProjectDabei 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