While Schleife mit Unterbrechnung



  • Hallo...

    Ich arbeite unter Linux (Raspberian) und möchte mir in der While Schleife immer das aktuelle Kamerabild anzeigen lassen. Dies soll so lange angezeigt werden, bis ich eine Taste (zum Beispiel Enter) drücke.

    #include<cv.h>
    #include<highgui.h>
    #include<iostream>
    
    #include <termios.h> // für Funktionen kbhit und getch
    
    using namespace cv;
    
    // Funktionen
    
    int getch();
    int getch()
    {
        static int ch = -1, fd = 0;
        struct termios neu, alt;
        fd = fileno(stdin);
        tcgetattr(fd, &alt);
        neu = alt;
        neu.c_lflag &= ~(ICANON|ECHO);
        tcsetattr(fd, TCSANOW, &neu);
        ch = getchar();
        tcsetattr(fd, TCSANOW, &alt);
        return ch;
    }
    
    int main(){
    
    	// Variable für Bild
    	Mat image;
    
    	// Kamera Init
    	VideoCapture cap;
    	cap.open(0);
    
    	// Anzeigefenster erstellen
    	namedWindow("window", 1);
    
    	while (getch() != '\n')
    	{
    		// Stream als Bild ablegen
    		cap >> image;
    
    		// Bild anzeigen
    		imshow("window", image);
    
    		// Pause in ms
    		waitKey(33);
    
                    getch();    // Eingabe
    	}
    
    	return 0;
    }
    

    Wie man in dem Code sieht habe ich bereits die fehlende Funktion getch unter Linux erweitert. Leider wartet diese aber immer bis eine Eingabe gemacht wurde. Ist es möglich das warten auf die Eingabe zu umgehen, sodass wenn keine Eingabe vorliegt, die Schleife einfach weiter geht?



  • Hallo,

    hast du den Kommentar bei dem '#include <termios.h>' hingeschrieben oder nur kopiert - hint hint...?



  • Mit z.B. man: select kann man unter anderem prüfen, ob ein fd lesbar ist.



  • Knigge schrieb:

    while (getch() != '\n')
    {
    ...
    getch();    // Eingabe
    }
    

    Sieht für mich erstmal seltsam aus, aber ich nun auch nicht der Hellste und es ist dazu auch noch 5 Uhr morgens.


Log in to reply