Probleme mit opencv Video ausgeben



  • Hi Leute;

    ich habe bei der C++ programmierung von OpenCV ein Problem mit diesem programm

    #include "highgui.h"
    
    int main( int argc, char** argv ){
        cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE );
        CvCapture* capture = cvCreateFileCapture( "hallo" );
        IplImage* frame;
        while(1){
                 frame = cvQueryFrame( capture );
                 if( !frame ) break;
                 cvShowImage ( "Example2", frame );
                 char c = cvWaitKey(33);
                 if( c == 27 ) break;
                 }
             cvReleaseCapture( &capture );
             cvDestroyWindow( "Example2" );
             }
    

    in dem gleichen Ordner liegt eine AVI-Datei namens hallo.
    Doch anstatt mir das Video widerzugeben gibt er mir für den bruchteil einer
    sekunde ein graues fenster aus und schließt das programm danach.

    ich habe einmal "if( !frame ) break;" weg gelassen dann gab er mir so lange ein
    Graues fenster aus bis ich ESC gedrückt habe.

    Ich habe schon bei google und in verschiedenen Foren nach einer Lösung gesucht,
    doch ich bin nicht fündig geworden 😞 😞 .

    Hoffentlich könnt ihr mir weiterhelfen.
    😕 😕 😕



  • Dann schlägt cvQueryFrame fehl, eventuell weil vorher schon cvCreateFileCapture fehgeschlagen ist. Du überprüfst die Rückgabe ja auch nicht. Meine Vermutung wäre (ohne die Funktion zu kennen), dass du vielleicht den kompletten Dateinamen mit Endung (und vielleicht sogar mit komplettem Pfad) angeben musst. Probier mal in die Richtung weiter.



  • #include "highgui.h"
    
    int main( int argc, char** argv ){
        cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE );
        CvCapture* capture = cvCreateFileCapture( "hallo" );
        IplImage* frame;
        while(1){
                 frame = cvQueryFrame( capture );
                 if( !frame ) break;
                 cvShowImage ( "Example2", frame );
                 char c = cvWaitKey(33);
                 if( c == 27 ) break;
                 }
             cvReleaseCapture( &capture );
             cvDestroyWindow( "Example2" );
             }
    

    Ich kann nur vermuten, dass cvCreateFileCapture den Dateinamen inkl. Endung erwartet.



  • Danke für die schnelle antwort.

    Ich habe das programmm jetzt so geandert:

    CvCapture* capture = cvCreateFileCapture( "C:\\Users\\Admin\\Desktop\\Neu\\C++\\OPENcv\\hallo" );
    

    Doch es ist immer noch das gleiche problem da.

    Das wird nicht der Fehler gewesen sein. 😞 😞 😞



  • Die Dateiendung der Datei ist doch avi, richtig? Wie wär's, wenn du dann auch hallo.avi schreibst, statt einfach nur hallo?



  • Wie wärs mal mit dem:

    CvCapture* capture = cvCreateFileCapture( "hallo.avi" );
    


  • funtzt leider auch nicht habe ich auch schohn ausprobiert!!



  • heino schrieb:

    funtzt leider auch nicht habe ich auch schohn ausprobiert!!

    Was steht denn dan in capture? 0?



  • _matze schrieb:

    Was steht denn dan in capture? 0?

    Capture ist gleich 0!!!!



  • Und du hast es auch ganz genau so

    heino schrieb:

    CvCapture* capture = cvCreateFileCapture( "C:\\Users\\Admin\\Desktop\\Neu\\C++\\OPENcv\\hallo.avi" );
    

    ausprobiert? Und die Datei existiert auch? Und der Pfad stimmt auch?



  • _matze schrieb:

    ausprobiert? Und die Datei existiert auch? Und der Pfad stimmt auch?

    Meine antworten sind ja, ja und ja.

    Das ist main Problem ich habe vieles ausprobiert, doch das Programm funzt immer noch nicht.



  • Könnte dies hier dein Problem sein?

    http://n2.nabble.com/bug-in-cvCreateFileCapture--td2123082.html

    Könntest du ja testen, indem du die Datei in hallo.avi1 umbenennst (aber weiterhin versuchst, hallo.avi zu öffnen). Seltsamer Bug, falls es den wirklich gibt...



  • sorry wenn ich euch auf die nerfen gehe,
    aber es funzt auch Mit hallo.avi1 nicht.



  • heino schrieb:

    sorry wenn ich euch auf die nerfen gehe,
    aber es funzt auch Mit hallo.avi1 nicht.

    Keine Sorge, auf die 'Nerfen' gehst du mir bestimmt nicht. 😃



  • Ich würde dir raten, mal die Doku zu der Funktion ganz genau zu studieren. Wenn der Dateiname wirklich nicht das Problem ist, kann es ja nur was Komisches sein (fehlt dir z.B. ein Codec oder so?). Außerdem solltest du auch mal andere Dateien ausprobieren.



  • Ich habe bei google gerade glesen das unter Vista bei vielen Leuten fehler auftreten.
    Ich habe Vista. Habe vorhin vergessen es zu erwähnen.
    Weiß jamand darüber etwas.



  • #include "highgui.h"
    
    int main( int argc, char** argv ){
        cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE );
        CvCapture* capture = cvCreateFileCapture( "hallo.avi" );
        IplImage* frame;
        while(1){
                 frame = cvQueryFrame( capture );
                 if( !frame ) break;
                 cvShowImage ( "Example2", frame );
                 char c = cvWaitKey(33);
                 if( c == 27 ) break;
                              }
             cvReleaseCapture( &capture );
             cvDestroyWindow( "Example2" );
             }
    

    Hi,
    Hiermit stelle ich noch ein par infos ein:
    ich benutze:
    1.Vista
    2.Dev-Cpp 4.9.9.2
    Und die OpenCV Version OpenCV_1.1pre1a
    Versucht habe ich auch die Versionen:
    OpenCV_1.0rc1 und
    OpenCV_1.0

    Um dieses Programm zum laufen zu bringen habe ich folgeses probiert:
    verschiedene Videos
    komplette Video adresse
    hallo.avi1 öffnen

    @_matze

    Was steht denn dan in capture? 0?
    

    warumm die frage??



  • heino schrieb:

    @_matze

    Was steht denn dan in capture? 0?
    

    warumm die frage??

    Weil wir dann auch sicher sein können, dass wirklich diese Funktion fehlschlägt und nicht cvQueryFrame oder so. Wenn du eine Funktion aufrufst, solltest du auch immer die Rückgabe prüfen (und worauf du prüfen musst, steht in der Doku). Stell dir vor, dein Programm würde funktionieren. Sobald die Datei umbenannt oder gelöscht wird, funktioniert es nicht mehr. Da ist es doch sinnvoll, im Fehlerfall z.B. eine Fehlermeldung auszugeben, anstatt das Programm abstürzen oder fehlerhaft ablaufen zu lassen.



  • Ok ist logisch ich habe dir oben schohn geschrieben dass :

    heino schrieb:

    _matze schrieb:

    Was steht denn dan in capture? 0?

    Capture ist gleich 0!!!!

    Also schlagt genau diese funktion fehl.

    Wo finde ich die Dokumentation??
    Bei Google habe ich nichts gefunden(warscheinlich falsche suchbegriffe eingegeben)!!



  • Welche Suchbegriffe hast du denn bitteschön eingegeben?

    Ergebnis nach ca. einer Viertelsekunde:

    http://www.cognotics.com/opencv/docs/1.0/index.html
    http://opencv.willowgarage.com/wiki/


Log in to reply