OpenCV und VideoWriter



  • Hi,

    ich versuche mit der Webcam Frames einzulesen, um sie anschließend in eine Datei zu schreiben. Das Einlesen funktioniert auch ganz gut, aber wenn ich cv::VideoWriter öffne, bekomme ich folgende Fehlermeldung:

    V4L2: Unable to get property <unknown property string>(6) - Invalid argument
    OpenCV: FFMPEG: tag 0xffffffff/'????' is not found (format 'avi / AVI (Audio Video Interleaved')
    

    Wenn ich nach den Fehlermeldungen suche, finde ich bloß Bugtickets oder die Information ich solle ffmpeg neu installieren.
    OpenCV habe ich aus den Standard-Repos, genauso wie ffmpeg. ffmpeg habe ich jedenfalls nochmal neu installiert, gleiches Ergebnis. Und ich habs auch mit .mp4 statt .avi versucht, gleiches Ergebnis.

    Hier mein zusammengeklebter Code:

    #include "opencv2/opencv.hpp"
    using namespace cv;
    
    int main(int argc, char** argv)
    {
        VideoCapture cap;
    
        // open the default camera, use something different from 0 otherwise;
        // Check VideoCapture documentation.
        if(!cap.open(0))
            return 0;
    
        /// Hier
        VideoWriter writer;
        Size size = {(int)cap.get(CV_CAP_PROP_FRAME_WIDTH), (int)cap.get(CV_CAP_PROP_FRAME_HEIGHT)};
        writer.open("/home/user/video.avi", cap.get(CV_CAP_PROP_FOURCC), cap.get(CV_CAP_PROP_FPS), size);
    
        for(;;)
        {
              Mat frame;
              cap >> frame;
              if( frame.empty() ) break; // end of video stream
              writer.write(frame);
              imshow("this is you, smile! :)", frame);
              if( waitKey(1) == 27 ) break; // stop capturing by pressing ESC
        }
        // the camera will be closed automatically upon exit
        // cap.close();
        return 0;
    }
    

    Was mach ich falsch?
    Oder handelt es sich hier tatsächlich um einen Bug?



  • Mit folgender Zeile:

    writer.open("/home/user/video.avi", -1 /*cap.get(CV_CAP_PROP_FOURCC)*/, cap.get(CV_CAP_PROP_FPS), size);
    

    ist die V4L2 Fehlermeldung jedenfalls schonmal behoben. Bleibt noch ffmpeg.



  • Kann jemand den Thread mal ins C++ Forum verschieben?

    Hab OpenCV nochmal mit cmake kompiliert und produziert immer noch die gleiche Fehlermeldung. Hat jemand eine Idee?



  • Ich habe folgenden Code im Einsatz, welcher problemlos funktioniert.

    cv::VideoWriter videoResult("out/result.mpeg", CV_FOURCC('P','I','M','1'), 20, cv::Size(w,h));
    videoResult<<currFrame;
    

    ... wobei currFrame einfach das aktuelle Bild von der Webcam ist, also vom Typ cv::Mat.



  • Dieser Thread wurde von Moderator/in Arcoth aus dem Forum Themen rund um die IT in das Forum C++ (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply