C++ OpenCV: imshow und cin

Eyken

Cadet 1st Year
Registriert
März 2013
Beiträge
8
Hallo,


ich habe folgendes Problem beim Programmieren von OpenCV mit C++ festgestellt:

Nach dem ein image(ich verwende die Klasse Mat) angezeigt wurde, soll der User eine Zahl eingeben:
[...]
imshow( "circles", img );

//cvWaitKey(0);

int circlesel;
cin>>circlesel;

Auf Grund des "cin"-Befehls wird zeitweise das image in dem Fenster nicht dargestellt, der Inhalt des Fensters ist grau. Erst nachdem "circlesel" eingegeben wurde, wird das image wieder richtig dargestellt. Mit Hilfe des "cvWaitKey(0)"-Befehls kann ich das Problem vermeiden, was natürlich etwas umständlich ist.

Warum kann ein image nicht richtig dargstellt werden, solange auf eine Eingabe gewartet wird? Gibt es eine Alternative zu dem "cvWaitKey(0)"?

Vielen Dank im Vorraus.
 
Grafische Ausgaben haben immer eine Ereignisschleife, um auf Befehle wie Fenster neu zeichnen etc zu reagieren. Pseudocodemäßig:
Code:
while(fenster_ist_ offen())
   events_abarbeiten();

Das ist im Prinzip das was sich hinter cv::waitKey() verbirgt. Also entweder hängt dein Programm gerade in der "Endlosschleife" wie oben angedeutet fest, oder es arbeitet eben den Programmcode wie dein std::cin ab. Beides gleichzeitig ist etwas kniffelig, da wäre die Möglichkeit, es über verschiedene Threads zu lösen, aber das erscheint mir ein etwas unagebrachter Aufwand zu sein. Besser wäre es, die Zahleingabe auch über eine grafische Oberfläche zu realisieren.
 
Danke.

Ich habe mir das prinzipiell ähnlich gedacht. Hatte aber gehofft, dass es irgendeine simple Lösung gibt.

Glücklicherweise besitzt OpenCV eine auf Qt basierende library ("highgui"). Ich werde vorerst mit dem umständlichen waitkey arbeiten und später ggf. zu der GUI übergehen.

Danke für deine Antwort.
 
Zurück
Oben