openCV cvCreateVideoWriter immer null zurück
Ich versuche zu speichern, eine video-Datei mit openCV unter Mandriva Linux 2009.1, angesteuert.
Leider cvCreateVideoWriter immer null zurück, obwohl ich sehen konnte, und beide ändern-und mpeg-fiels, in anderen Worten cvCaptureFromCam, cvCaptureFromAvi, cvRetrieveFrame arbeitet.
Ich versucht alle möglichen codecs von dieser tutorial und dieser codec Seite. Ich habe auch versucht 0 für unkomprimierte avi-und -1 für eine Auswahl-box, in der fourcc-parameter, aber keine Wahl hat geknallt und nichts ist passiert. Ich auch geändert isColor 0.
Ich habe auch Schreibrechte im Arbeitsverzeichnis.
Hier ist der entsprechende Codeausschnitt:
CvVideoWriter *writer = 0;
int isColor = 1;
int fps = 25;
int frameW = 640;
int frameH = 480;
if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0])))
capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 );
else if( argc == 2 ) {
printf("argc == 2 :%s:\n", argv[1] );
capture = cvCaptureFromFile( argv[1] );
}
cvInitSystem(argc,argv);
writer = cvCreateVideoWriter("out.avi",CV_FOURCC('I','Y','U','V'),fps,cvSize(frameW,frameH),isColor);
Was das problem sein könnte?
InformationsquelleAutor rics | 2009-05-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese wird davon abhängen, wie Ihre OpenCV-Bibliothek konfiguriert wurde. Insbesondere glaube ich, dass
HAVE_FFMPEG
müssen definiert werden, damit die 'IYUV' FOURCC-Wert behandelt werden. War Ihre Bibliothek gebaut mitHAVE_FFMPEG
definiert?Den Standard-writer-Objekt (die erstellt wird, wenn fourcc null ist, oder die fourcc-Wert wird nicht behandelt, indem Sie eine der verfügbaren Handler) erstellt eine image-Datei pro Bild. In diesem Fall wird der Dateiname muss so etwas wie "die Datei" %04d.foo" oder "file0001.foo", sonst writer-Erstellung fehlschlägt. Sie könnten versuchen, vorbei an so etwas wie "test0001.png" für den filename-parameter als ein experiment, um zu verifizieren, dass die Standard-Bild-Verfasser ist erfolgreich erstellt (dies ist nicht direkt helfen, aber vielleicht ein Weg, um zu bestätigen, dass Ihre fourcc-Wert nicht erkannt wird oder durch einen verfügbaren Schriftsteller.)
Gemäß der Dokumentation, die option zum öffnen eines Auswahl-Dialoges, wenn die fourcc gleich -1 ist Windows-spezifisch.
Nach highgui.h #define CV_FOURCC_DEFAULT -1 /* Verwenden Sie Standard-codec für den angegebenen Dateinamen (nur Linux) */, Damit sollte es funktionieren mit der Standard-codec unter Linux, als auch.
Interessanterweise printf("fourcc: %lf\n",cvGetCaptureProperty(capture,CV_CAP_PROP_FOURCC)); gibt 0 zurück für eine Aufnahme aus einem mpeg-2-Datei, während die opencv könnte, zeigen die ursprünglichen und die Bewegung erkannt-version von dem Film in einem separaten Fenster.
Ich habe nie geschafft, das video Schriftsteller zu arbeiten, in der OpenCV-1. Entweder hab ich NULL für den writer, oder es produziert korrupte frames. Upgrade auf OpenCV 2 lösen beide dieser Probleme.
InformationsquelleAutor Lance Richardson
Ich dein post gelesen, Lance Antwort und Ihre Kommentare, um es dann endlich gefunden workaround für mich und beschlossen, fügen Sie ein paar Notizen für alle kämpfen mit diesem Problem.
Erste, was zu prüfen ist, ob CMake gebaut hat, OpenCV mit FFmpeg. Mein Fasten und schreckliche Weise, dies zu tun ist, einfach nur zu laufen
cmake
mit flags und Parameter, wie Sie schrieb Sie während der installation, wieder. Am Ende der Ausgabe gibt es logs darüber, welche Komponenten installiert werden. Wenn Ihre Parameter kopieren Sie diese während der eigentlichen installation, erhalten Sie Informationen über das, was ist bereits installiert.Als Nächstes möchten Sie vielleicht zu prüfen des verfügbaren Encodern und Decodern für die codecs auf Ihrem linux-system. Dafür benutze ich
ffmpeg -codecs
.Dritte Hinweis ist zuverlässig und primitive Argumente-set für
cvCreateVideoWriter
:fps
undsize
hier sind Variablen, die Ihre Werte für fps und frame_size Felder bzw.. Erhalten Sie Taschen von Bildern-was Lance Richardson und rics bereits erwähnt.Schließlich für mein system, auf dem OpenCV ist gebaut mit FFmpeg-und XVID-encoder installiert ist, Steck ich diese Argumente in
cvCreateVideoWriter
:und endlich das bekommen, was ich will.
Hoffe, meine Antwort ist von nutzen!
InformationsquelleAutor fyodorananiev