Programmabsturz bei Kombination QT / OpenCV

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
PT
Beiträge: 6
Registriert: 14. Mai 2010 18:50

Programmabsturz bei Kombination QT / OpenCV

Beitrag von PT »

Hallo zusammen,

auf der Suche nach der Lösung meines Problems bin zufällig auf dieses Forum gestoßen. Da ich schon ausreichend die Suchfunktion genutzt habe und keine Lösung gefunden habe, schildere ich mal ohne schlechtes Gewissen mein Problem.

Ich versuche in Eclipse OpenCV und QT zusammen zu bringen, aber mein kompiliertes Programm stürzt sofort nach dem Start ab. Dürftige Informationen, daher hier meine Umgebung:

- Windows Umgebung
- Eclipse Galileo für C++
- OpenCV 1.0 (warum nicht 2.0? Weil der dicke Schinken vor mir für 1.0 ist. Bevor ich mich mit Fehlern rumschlage, die aufgrund der Versionsunterschiede entstehen, will ich erst einmal mit 1.0 arbeiten)
- Installiert: das aktuelle QT SDK von Trolltech, Version 4.6.2
- Installiert: Qt Eclipse Integration

Wenn ich kleine QT-Programme schreibe, klappt alles einwandfrei, gehe daher davon aus, dass soweit alles korrekt eingerichtet ist. Dasselbe gilt für OpenCV, eigenständige OpenCV-Programme klappen auch.

Nun habe ich für die Zusammenarbeit von QT und OpenCV die Pro-Datei angepasst:

Code: Alles auswählen

TEMPLATE = app
TARGET = Test
QT += core \
    gui
HEADERS += 
SOURCES += main.cpp
FORMS += 
RESOURCES += 
INCLUDEPATH += "C:\Program Files\OpenCV\cxcore\include" \
"C:\Program Files\OpenCV\cv\include" \
"C:\Program Files\OpenCV\cvaux\include" \
"C:\Program Files\OpenCV\otherlibs\highgui" \
"C:\Program Files\OpenCV\otherlibs\cvcam\include"
win32:LIBS += -L"C:\Program Files\OpenCV\lib"
LIBS += -lcxcore \
-lcv \
-lhighgui \
-lcvaux \
-lcvcam
Beim Build erhalte ich keine Fehler, die Test.exe wird problemlos erstellt. Starte ich diese aber, kommt sofort die Meldung, dass die Test.exe nicht mehr funktioniert. Testausgaben innerhalb des Codes werden auch nicht mehr ausgeführt. Inzwischen habe ich das Programm schon aufs Einfachste reduziert:

Code: Alles auswählen

#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;


int main(int argc, char* argv[]) {

	IplImage* image;

	cout << "Bis hierher gehts";
	image = cvLoadImage("C:/Test.jpg");

	return 0;

}
Wenn ich die Zeile image = cvLoadImage("C:/Test.jpg"); rausnehme, dann geht es.


Ich bin kein C++-Profi, habe aber so einigermaßen die Grundlagen drin und mit OpenCV etwas gearbeitet. Seit einer Woche experimentiere ich mit QT anhand eines Einführungsbuchs, auch kein Problem. Da mir die GUI-Mittel von OpenCV etwas dürftig erscheinen, möchte ich beides kombinieren.

Da ja scheinbar einige diese Kombination nutzen, würde ich mich über einen Denkanstoß freuen.
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Uhm gute Frage. Man müsste erstmal rausfinden ob es an Qt, OpenCV, Eclipse, irgendwelchen falschen Libs oder sonstwas liegt.

Also ganz spontan, wenn ich an deinem Rechner sitzen würde, würde ich den QtCreator installieren, eine neue Qt4 Gui Application erzeugen und diese Opencv Zeilen in den Konstructor packen. Das ganze mit dem MinGw compilieren und starten. Wenn das geht ist schonmal nicht alles kaputt ;)

Nebenbei würde ich mir die Compiler und Fehlermeldungen ansehen die du vergessen hast und dann auf den Microsoft Compiler wechseln. Wenn es dann immer noch geht wieder zurück zu Eclipse und die Compilerausgaben vergleichen. Irgendwann wird sich der essentielle Unterschied zeigen.
PT
Beiträge: 6
Registriert: 14. Mai 2010 18:50

Beitrag von PT »

Hallo,

danke schon einmal. Wie gesagt, wenn ich QT alleine in der gleichen Eclipse-Umgebung verwende, dann geht's. Ebenso gilt das für OpenCV, das gleiche "Programm" läuft auch in der Eclipse-Umgebung, wenn es kein QT-Projekt ist. Spricht denke ich dafür, dass ich irgendwo einen projektspezifischen Fehler habe oder dass die Bibliotheken nicht zusammen laufen können. Compiler- und Fehlerausgaben gibt es nicht viele, bzw. lese ich da nicht viel raus:

Code: Alles auswählen

mingw32-make debug 
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/Entwicklung/C++/Test'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\Qt4\qt\include\QtCore" -I"..\..\..\Qt4\qt\include\QtGui" -I"..\..\..\Qt4\qt\include" -I"..\..\..\Program Files\OpenCV\cxcore\include" -I"..\..\..\Program Files\OpenCV\cv\include" -I"..\..\..\Program Files\OpenCV\cvaux\include" -I"..\..\..\Program Files\OpenCV\otherlibs\highgui" -I"..\..\..\Program Files\OpenCV\otherlibs\cvcam\include" -I"..\..\..\Qt4\qt\include\ActiveQt" -I"debug" -I"..\..\..\Qt4\qt\mkspecs\win32-g++" -o debug\main.o main.cpp
main.cpp: In function 'int main(int, char**)':
main.cpp:17: warning: unused variable 'image'
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\Test.exe debug/main.o  -L"c:\Qt4\qt\lib" -lmingw32 -lqtmaind "-LC:\Program Files\OpenCV\lib" -lcxcore -lcv -lhighgui -lcvaux -lcvcam -lQtGuid4 -lQtCored4 
mingw32-make[1]: Leaving directory `C:/Entwicklung/C++/Test'
Ich habe mal in der Ereignisanzeige nachgeschaut, da steht:

Code: Alles auswählen

Fehlerhafte Anwendung Test.exe, Version 0.0.0.0, Zeitstempel 0x4beeaaeb, fehlerhaftes Modul highgui100.dll, Version 6.0.6002.18005, Zeitstempel 0x49e03821, Ausnahmecode 0xc0000135, Fehleroffset 0x00009eed, Prozess-ID 0x1608, Anwendungsstartzeit 01caf438cff21840.
Ich habe gerade eine Vermutung, muss ich vielleicht die Sourcen zu OpenCV mit qmake neu kompilieren?

Dem Hinweis mit QTCreater werde ich auch noch nachgehen, habe aber damit bisher nicht gearbeitet.
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

qmake kannste nur für Qt Projekte benutzen. Das hat mit OpenCV nix zu tun.

Ajo hat dir mal QtCreator drauf. Um den Fehler wenigstens etwas einzugrenzen.
PT
Beiträge: 6
Registriert: 14. Mai 2010 18:50

Beitrag von PT »

Hallo,

Korrektur, falls das schon jemand gelesen hat: In QT Creator geht es,
ich habe ein einfaches Projekt angelegt, Inhalt der Pro-Datei und den Code kopiert.

Ich bin dann nochmal in eclipse zurückgegangen und habe in meinem anderen Projekt, in dem nur OpenCV ohne QT läuft (auch MiniGW gcc compiler aus dem QT-Verzeichnis), getestet und es geht. Wieder wechsel in mein QT-Projekt ohne OpenCV-> Geht. Wechsel in das Projekt mir QT und OpenCV-> Geht nicht:(

QT Creator ist nett, eclipse wäre mir lieber. Noch eine Idee?
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Vergleich mal die Compilerausgaben von Eclipse und Qt. Beide nutzen doch mingw oder?
PT
Beiträge: 6
Registriert: 14. Mai 2010 18:50

Beitrag von PT »

Genau, beide sollten MiniGw nutzen

Code: Alles auswählen

Führe Build-Schritte für Projekt Test aus...
Starte: c:/qt4/qt/bin/qmake.exe E:/Benutzer/Peter/Dokumente/Test/Test.pro -spec win32-g++ -r 
Beendet mit Rückgabewert 0.
Starte: C:/Qt4/mingw/bin/mingw32-make.exe -w 
mingw32-make: Entering directory `E:/Benutzer/Peter/Dokumente/Test'
C:/Qt4/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `E:/Benutzer/Peter/Dokumente/Test'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt4\qt\include\QtCore" -I"c:\Qt4\qt\include\QtGui" -I"c:\Qt4\qt\include" -I"c:\Program Files\OpenCV\cxcore\include" -I"c:\Program Files\OpenCV\cv\include" -I"c:\Program Files\OpenCV\cvaux\include" -I"c:\Program Files\OpenCV\otherlibs\highgui" -I"c:\Program Files\OpenCV\otherlibs\cvcam\include" -I"c:\Qt4\qt\include\ActiveQt" -I"debug" -I"c:\Qt4\qt\mkspecs\win32-g++" -o debug\main.o main.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\Test.exe debug/main.o -L"c:\Qt4\qt\lib" -lmingw32 -lqtmaind "-LC:\Program Files\OpenCV\lib" -lcxcore -lcv -lhighgui -lcvaux -lcvcam -lQtGuid4 -lQtCored4
mingw32-make[1]: Leaving directory `E:/Benutzer/Peter/Dokumente/Test'
mingw32-make: Leaving directory `E:/Benutzer/Peter/Dokumente/Test'
Beendet mit Rückgabewert 0.
PT
Beiträge: 6
Registriert: 14. Mai 2010 18:50

Beitrag von PT »

Hallo,

der QTCreator und ich sind jetzt Freunde, hätte ich garnicht gedacht, sah erst so nach "Spielerei" aus. Falls nicht zufällig jemand eine grandiose Idee hat, werde ich damit leben können. Aber vielleicht wird es auch sonst jemanden interessieren, der ein ähnliches Problem hat.

Grüße,
Peter

PS: @kater, vielen Dank für deine Hinweise bis dahin
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Gern geschehen.
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

Mal so ins Blaue gefragt:
Hast Du Qt und OpenCV beides selbst kompiliert?
Es sollten nämlich beide mit dem selben Compiler erstellt worden sein.

Oder hast Du vielleicht eine pre-compiled Version benutzt?
Linux, das längste Text-Adventure aller Zeiten
PT
Beiträge: 6
Registriert: 14. Mai 2010 18:50

Beitrag von PT »

Hallo RavenIV,

danke für den Hinweis, eine ähnliche Idee hatte ich auch, ich habe tatsächlich vorkompilierte OpenCV-Sourcen genommen. Aber wenn es daran liegt, warum geht es dann im QTCreator?
mustermann.klaus
Beiträge: 23
Registriert: 6. April 2009 12:21
Wohnort: Berlin

gleiches Problem

Beitrag von mustermann.klaus »

hallo erstmal, ist ja schon n bisschen her, aber trotzdem:
Ich habe noch nie eine lib selbst kompiliert. Bisher benutzte ich openCV (alt).
Seit ich openCV 2.0 und qt4.6 benutze geht nüscht mehr. Ich habe die Vermutung, ich muss openCV selbst kompilieren. ... und ich werde wohl mehr als n Tip benötigen.
Bisher habe ich folgendes getan:
qt-Eingabeshell geöffnet, in den openCV-Ordner navigiert, qmake -project, und das dann versucht, das im qt-creator zu kompilieren. geht natürlich nicht ...wäre ja zu einfach. was tun?
DANKE für jede Hilfe
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: gleiches Problem

Beitrag von solarix »

mustermann.klaus hat geschrieben:...
qt-Eingabeshell geöffnet, in den openCV-Ordner navigiert, qmake -project, und das dann versucht, das im qt-creator zu kompilieren. geht natürlich nicht ...wäre ja zu einfach. was tun?
RTM: http://opencv.willowgarage.com/wiki/InstallGuide

hth...
Antworten