2010-12-03 4 views

Antwort

9

Auch nach meiner Änderungen sieht die Frage eher wie ein „send-me-the-codez“ Nachfrage als eine typische Stackoverflow Frage wobei die OP liefert detaillierte Informationen und zeigt, dass er oder sie einige echte gesetzt hat dachte darüber nach.

Also gebe ich nur eine "halbe Antwort" ... Jedenfalls bin ich nur mäßig vertraut mit OpenCVs maschinellem Lernmodul und kenne kaum den Rest der Bibliothek. ;-)

Kurz gesagt sollte der Pseudocode so aussehen und die Implementierung würde typischerweise die erwähnten OpenCV-Methoden erfordern.

myCapt = cvCreateFileCapture("myInput.avi") // Assuming the feed is from a file. 

    while (there are frames and we still want them) 
     cvGrabFrame(myCapt) 
     myImg = cvRetrieveFrame(myCapt) 
     // alternatively to cvGrabFrame + cvRetrieveFrame, could use cvQueryFrame() 

     // save the file (or do something with it...) 
     cvSaveImage("some_file_name_with_seq_nr", myImage) 

    cvReleaseCapture(capture) 

Wie angedeutet, die oben genannten Bedürfnisse viel Syntax und Logik der Arbeit (z. B. herauszufinden, wann zu stoppen, den Dateinamen der einzelnen Frames produziert und natürlich richtig die Variablen und mit der rechten Dereferenzierungsebene erklärt w/alle sie Zeiger ;-). Natürlich wird einiges davon erleichtert, wenn Sie die Python-Schnittstelle verwenden.

Die Reading and Writing Images and Video OpenCV documentation page, bietet detailliertere Informationen zu den einzelnen Methoden.

11

Zu meiner Überraschung konnte ich auf StackoverFlow keine Antwort auf diese Frage finden.

Ich verwende derzeit OpenCV 2.1. Das könnte ein wenig alt sein, aber es funktioniert wie ein Zauber. Das Programm wird eine Eingabedatei gelesen und eine Folge von Bildern auf dem aktuellen Ordner mit dem Namen erstellen * frame_xx.jpg *

#include <stdio.h> 
#include <stdlib.h> 
#include "cv.h" 
#include "highgui.h" 

int main(int argc, char** argv) 
{ 
    if (argc < 2) 
    { 
     printf("!!! Usage: ./program <filename>\n"); 
     return -1; 
    } 

    printf("* Filename: %s\n", argv[1]); 

    CvCapture *capture = cvCaptureFromAVI(argv[1]); 
    if(!capture) 
    { 
     printf("!!! cvCaptureFromAVI failed (file not found?)\n"); 
     return -1; 
    } 

    int fps = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); 
    printf("* FPS: %d\n", fps); 

    IplImage* frame = NULL; 
    int frame_number = 0; 
    char key = 0; 

    while (key != 'q') 
    { 
     // get frame 
     frame = cvQueryFrame(capture);  
     if (!frame) 
     { 
      printf("!!! cvQueryFrame failed: no frame\n"); 
      break; 
     }  

     char filename[100]; 
     strcpy(filename, "frame_"); 

     char frame_id[30]; 
     itoa(frame_number, frame_id, 10); 
     strcat(filename, frame_id); 
     strcat(filename, ".jpg"); 

     printf("* Saving: %s\n", filename); 

     if (!cvSaveImage(filename, frame)) 
     { 
      printf("!!! cvSaveImage failed\n"); 
      break; 
     } 

     frame_number++; 

     // quit when user press 'q' 
     key = cvWaitKey(1000/fps); 
    } 

    // free resources 
    cvReleaseCapture(&capture); 

    return 0; 
} 
+0

thnx alot ui hat opencv 2.0.0 kann dieser Code arbeitet daran – meroz

+0

kann u plz sagte mir wie man diesen Code schreibt und ihn ausführt – meroz

+0

@ mero0o Das ist eine andere völlig andere Frage und hängt davon ab, welche Plattform Sie verwenden. Ich glaube, dass diese Frage bereits gelöst ist. Vergiss nicht, meine Antwort zu akzeptieren. – karlphillip