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.