2010-12-03 24 views

Respuesta

9

Incluso después de mis ediciones, la cuestión parece más a un "enviar-me-la-codez" demanda que un Stackoverflow típica pregunta mediante el cual el OP proporciona información detallada y demuestra que él o ella ha puesto algunos reales pensado en eso.

Así que solo daré una "media respuesta" ... De todos modos, solo estoy medianamente familiarizado con el módulo de aprendizaje automático de OpenCV y apenas soy consciente del resto de la biblioteca. ;-)

En pocas palabras, el pseudo código debería verse así y la implementación normalmente requeriría los métodos de OpenCV mencionados.

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) 

como se insinuó la necesidades anteriores mucho sintaxis y la lógica de trabajo (por ejemplo. Averiguar cuándo parar, produciendo el nombre del archivo de los cuadros individuales, y por supuesto declarar adecuadamente las variables y utilizando el nivel correcto de indirección w/todos ellos punteros ;-). Por supuesto, algo de esto es más fácil si usa la interfaz de Python.

El Reading and Writing Images and Video OpenCV documentation page proporciona información más detallada acerca de los métodos individuales.

11

Para mi sorpresa, no pude encontrar una respuesta a esta pregunta en StackoverFlow.

Actualmente estoy usando OpenCV 2.1. Esto podría ser un poco viejo pero funciona como un encanto. El programa lee un archivo de entrada y crear una secuencia de imágenes en la carpeta actual llamado * * 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 mucho a la interfaz de usuario han OpenCV 2.0.0 puede funcionar esto de código en él – meroz

+0

puede u PLZ me dijo cómo escribir este código y ejecutarlo – meroz

+0

@ mero0o Esa es otra pregunta completamente diferente y depende de la plataforma que esté utilizando. Creo que esta pregunta ya está resuelta. No olvides aceptar mi respuesta. – karlphillip

Cuestiones relacionadas