Seite 1 von 1

Programmabsturz bei Kombination QT / OpenCV

Verfasst: 15. Mai 2010 11:53
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.

Verfasst: 15. Mai 2010 14:58
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.

Verfasst: 15. Mai 2010 16:19
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.

Verfasst: 15. Mai 2010 16:33
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.

Verfasst: 15. Mai 2010 17:47
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?

Verfasst: 15. Mai 2010 18:38
von kater
Vergleich mal die Compilerausgaben von Eclipse und Qt. Beide nutzen doch mingw oder?

Verfasst: 15. Mai 2010 18:51
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.

Verfasst: 17. Mai 2010 19:34
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

Verfasst: 17. Mai 2010 19:46
von kater
Gern geschehen.

Verfasst: 18. Mai 2010 08:54
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?

Verfasst: 21. Mai 2010 13:06
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?

gleiches Problem

Verfasst: 5. Juli 2010 21:30
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

Re: gleiches Problem

Verfasst: 20. Juli 2010 18:32
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...