cvShowImage von openCV innerhalb von QT Programm



  • Hallo,

    Ich habe ein QT4 Programm am laufen und öffne aus diesem heraus ein neues Fenster welches via cvShowImage ( aus openCV ) ein Bild darstellt. Ich setze auch cvWaitKey(0) um das neue Fenster solange anzuzeigen, bis ich eine Taste drücke.

    Sobald ich eine Taste drücke stürzt mir das ganze Programm aber ab.
    Starte ich denn openCV code direkt , also nicht aus QT heraus, klappt alles wunderbar.

    Woran kann das liegen?

    Sollte der openCV allenfalls in einem eigenen Thread gestartet werden?



  • Zeig am besten mal ein wenig Code.



  • Ok.

    Hier ein minimal Beispiel:

    #include "window.h"
    #include <highgui.h>
    
    Window::Window(){
    
     setText("Show Image");
     connect(this, SIGNAL(clicked()),this,SLOT(image()));
    
    }
    
    void Window::image() {
    
    	IplImage *imgA = cvLoadImage("b4.jpg");
    
    	cvNamedWindow("Bild", 0);
    	cvShowImage("Bild", imgA);
    	cvWaitKey(0);
    
    	cvReleaseImage(&imgA);
    	cvDestroyWindow("Bild");
    }
    
    #ifndef WINDOW_H_
    #define WINDOW_H_
    
    #include <qpushbutton.h>
    
    class Window : public QPushButton
    {
    	Q_OBJECT
    public :
    	Window();
    
    public slots:
    	void image();
    };
    
    #endif /* WINDOW_H_ */
    
    #include <qapplication.h>
    #include <window.h>
    
    int main( int argc, char **argv )
    {
    	QApplication app( argc, argv );
    
    	Window * win = new Window();
    	win->show();
    
    	return app.exec();
    
    }
    

    pro file:

    ######################################################################
    # Automatically generated by qmake (2.01a) Do Mrz 26 09:07:47 2009
    ######################################################################
    
    TEMPLATE = app
    TARGET = 
    DEPENDPATH += .
    INCLUDEPATH += . /opt/local/include/opencv  #opencv include dateien
    LIBS += -lhighgui -lcxcore  #opencv libraries
    
    # Input
    HEADERS += window.h
    SOURCES += main.cpp window.cpp
    

    Bild wird korrekt angezeigt, falls dann aber eine Tastatureingabe erfolgt, hängt sich das Programm auf. cvWaitKey(0) soll das Bild solange anzeigen bis eine Taste gedrückt wird, und dann weitergehen im Code.



  • Beim ersten Mal hast du gesagt, das Programm stürzt ab. Beim deinem zweiten Post aber sagst du, es hängt sich auf. Wat denn nu? 😉 Kommt da eine Fehlermeldung? Wenn ja, welche?

    An cvWaitKey wird es wohl kaum liegen. Ich vermute mal, dass entweder cvReleaseImage oder cvDestroyWindow das Problem verursacht. Hau das cvWaitKey mal raus, setz einen Breakpoint auf cvReleaseImage und geh schrittweise durch, bis ein Fehler kommt.



  • _matze schrieb:

    Beim ersten Mal hast du gesagt, das Programm stürzt ab. Beim deinem zweiten Post aber sagst du, es hängt sich auf. Wat denn nu? 😉 Kommt da eine Fehlermeldung? Wenn ja, welche?

    Ja, sorry für die Ungenauigkeit. Das Programm stürzt nicht ab, es hängt sich auf. Genauer gesagt hängt sich nur das Fenster mit Bild auf, welches von openCV gestartet wurde. Der Qt Button funktioniert weiter. Ein Klick darauf und ein weiteres Fenster mit einem Bild geht auf. Keine Fehlermeldungen.

    Lasse ich cvWaitKey() / cvReleaseImage oder, und cvDestroyWindow ändert sich nichts am Ganzen.

    Mit dem debugger konnte ich auch nichts verdächtiges sehen.


Anmelden zum Antworten