2010-12-03 4 views
1

Je veux créer une application simple dans openCV qui capture la vidéo de la caméra et la stocke dans un fichier. Le problème est:OpenCV, capturer à partir de la caméra et enregistrer dans le fichier

1- comment accéder à la fréquence d'image de mon appareil photo. cvGetCaptureProperty() renvoie toujours une valeur FPS de zéro.

2- comment contrôler le temps où la capture se s'il vous plaît, à savoir comment limiter le temps de capture à 10 secondes par exemple ...

ici est mon 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; 
    } 
} 

merci vous à l'avance

Répondre

1

1 (Edit): Selon this site near the bottom of the page, il est nécessaire d'appeler

cvQueryFrame(capture); 

d'abord afin d'obtenir les bonnes propriétés. Réessayez appelant

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

après

2: Vous pouvez utiliser cvWaitKey (millisecondes) ou tout simplement un sommeil. Comment capturez-vous les images, à quoi ressemble votre boucle?

+0

quand j'écris la ligne de code écrit que je reçois fps = 0, notez que je suis la capture à partir d'un appareil photo .... et regarde ma mise à jour de poste pour voir le code que je suis en train d'exécuter le –

+0

fichier résultant a un taux de trame plus élevé que ce que j'ai vu sur la came –

+0

c'est possible alors qu'une partie des images source sont enregistrées plusieurs fois. Mais comme la compression compense cela, vous ne devriez pas avoir d'inconvénients. – Atmocreations

0

1 - Toutes les caméras ne fournissent pas la fréquence d'image, cela dépend de ce que leur pilote prend en charge. 2 - Pour capturer 10 secondes de vidéo, calculez simplement combien de trames il s'agit et au lieu de while (1) - qui fonctionne pour toujours, faites quelque chose comme.

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

} 
Questions connexes