2010-12-03 24 views
1

Ich möchte eine einfache Anwendung in openCV erstellen, die Video von der Kamera erfasst und in einer Datei speichert. Das Problem ist:OpenCV, Aufnahme von der Kamera und Speichern in Datei

1- wie auf die Bildrate meiner Kamera zugreifen. cvGetCaptureProperty() gibt immer einen FPS-Wert von Null zurück.

2-, wie die Zeit zu steuern, in dem die Einnahme bitte, dh wie nimmt die Aufnahmezeit auf 10 Sekunden zum Beispiel ...

hier ist mein Code

void main(){ 

    CvCapture *capture = cvCaptureFromCAM(0); 
    int width = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH); 
    int height = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT); 
    CvVideoWriter *writer = cvCreateVideoWriter("myCamCapture.avi", -1, 30, cvSize(width, height)); 
    cvNamedWindow("d", CV_WINDOW_AUTOSIZE); 
    IplImage *frame = 0; 

    while(1) 
    { 
     frame = cvQueryFrame(capture); 
     cvShowImage("d",frame); 
     cvWriteFrame(writer, frame); 
     char c = cvWaitKey(30); 
     if(c == 27) break; 
    } 
} 

danken zu begrenzen in Ihnen voraus

Antwort

1

1 (Edit): nach this site near the bottom of the page, ist es notwendig,

zu nennen

zuerst, um korrekte Eigenschaften zu erhalten. Retry Aufruf

int fps  = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); 

danach

2: Sie könnten cvWaitKey (Millisekunden) verwenden oder einfach einen Schlaf. Wie bildest du Bilder, wie sieht dein Loop aus?

+0

wenn ich die Zeile Code schreiben Sie schrieben i fps = 0 Hinweis bekommen, dass ich von einer Kamera bin Erfassung .... und schaut auf meinem Post-Update um den Code zu sehen Ich versuche –

+0

die auszuführen Die resultierende Datei hat eine höhere Bildrate als die, die ich auf der Kamera –

+0

gesehen habe. Dies ist möglich, während ein Teil der Quellframes mehrfach gespeichert wird. Aber da die Komprimierung dies kompensiert, sollten Sie keine Nachteile haben. – Atmocreations

0

1 - Nicht alle Kameras liefern die Bildrate, es hängt davon ab, was ihr Treiber unterstützt.

2 - Um 10 Sekunden Video zu erfassen, einfach herausfinden, wie viele Frames das sind und statt while (1) - was für immer läuft, etwas tun.

// assumign you want 10seconds of 3fps = 300 frames total 
for (int iframe=0;iframe<300;iframe++) { 

} 
Verwandte Themen