cvShowImage von openCV innerhalb von QT Programm

Alles rund um die Programmierung mit Qt
Antworten
oracle
Beiträge: 20
Registriert: 6. März 2009 18:59

cvShowImage von openCV innerhalb von QT Programm

Beitrag von oracle »

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?

Hier ein minimal Beispiel:

Code: Alles auswählen

#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");
}

Code: Alles auswählen

#ifndef WINDOW_H_
#define WINDOW_H_

#include <qpushbutton.h>

class Window : public QPushButton
{
	Q_OBJECT
public :
	Window();

public slots:
	void image();
};



#endif /* WINDOW_H_ */

Code: Alles auswählen

#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:

Code: Alles auswählen

######################################################################
# 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.



ps. die gleiche Frage habe ich auch hier gestellt: http://www.c-plusplus.de/forum/posting- ... 86160.html - allerdings noch keine Antwort erhalten.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Das Problem ist doch folgendes: du verwendest Funktionen einer Library (HighGUI), welche von den Entwicklern selbst ausdruecklich nur fuer quick-and-dirty-Aufgaben verwendet werden duerfen ("If you intend to build end user applications, don't use HighGUI for this"). Diese Funktionen benoetigen ja ebenfalls Systemevents (Repaint, Eingaben usw.) und stoeren vermutlich ein anderes Framework - in diesem Fall Qt.

Daher: verwende OpenCV/HighGUI fuer das Kennenlernen von OpenCV. Fuer "richtige" GUIs mit Qt solltest du IMHO nur noch die Basisfunktionen von OpenCV (Capture und Verarbeitung) einsetzen und die Anzeige Qt ueberlassen.
Antworten