Précédent   Forum des professionnels en informatique > C et C++ > Bibliothèques > OpenCV
OpenCV Vos questions sur l'API de traitement d'images OpenCV.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/12/2011, 00h49   #1
Invité de passage
 
Inscription : septembre 2006
Messages : 2
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 2
Points : 0
Points : 0
Par défaut Capture d'images par webcam

Bonjour à tous,
J'ai écrit un petit programme basique qui permet de capturer des images provenant de la webcam et de les enregistrer dans un fichier vidéo. Ce programme devait me permettre de saisir une image lorsque j'appuie sur une touche et de l'ajouter à ma vidéo (stop motion). J'ai remarqué qu'il y a un décalage de 5 images entre l'appuie sur la touche et l'image qui se présente réellement à la webcam. En d'autre terme, si je veux obtenir la bonne image, il me faut appeler 5 fois cvGrabFrame() avant d'appeler cvRetrieveFrame()... Je me rends alors compte que je ne comprend pas vraiment ce que font ces fonctions. cvGrabFrame() demande une image à la webcam mais celle-ci semble en produire 5 par défault. Comment puis-je remédier au problème sachant que ce problème ne se produit certainement pas sur toutes les machines?

Voici le code associé:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
 
//******************************************************************************
 
//**************  INITIALISATION ***********************************************
 
//******************************************************************************
    const char* window_title = "Titre";	
 
    char key = 'a';
 
    CvSize size_video;
 
 
 
    IplImage *img = NULL;
 
    IplImage *img_temp = NULL;
 
 
 
    CvCapture* capture = cvCaptureFromCAM(0);
 
    if(!capture )return 10;
 
    if(!cvGrabFrame(capture))return 20;
 
    img = cvRetrieveFrame(capture);
 
 
 
    size_video.width = img->width;
 
    size_video.height = img->height;
 
 
 
    CvVideoWriter* writer = cvCreateVideoWriter("out.avi",CV_FOURCC('P','I','M','1'), 25, size_video, 1 );
 
 
 
    cvNamedWindow (window_title, CV_WINDOW_AUTOSIZE);
 
    cvShowImage (window_title, img);
 
 
 
    printf("\nCapture de la webcam:\nlargeur: %f\nhauteur:%f\n",cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT));
 
 
 
//******************************************************************************
 
//**************  BOUCLE PRINCIPALE ********************************************
 
//****************************************************************************** 
 
 
 
while(key != 'q')
 
{  
 
  for(int i=0; i<5; i++) //Problème de quintuplets d'images mises en mémoires
 
{
 
      if(!cvGrabFrame(capture))return 20;
 
}
 
img = cvRetrieveFrame(capture);
 
cvShowImage(window_title, img);
 
cvWriteFrame(writer, img);
 
 
 
 
 
key = cvWaitKey(0);
 
}
 
//******************************************************************************
 
//**************  DESALLOCATIONS ***********************************************
 
//******************************************************************************
 
    cvDestroyAllWindows();
 
    cvReleaseVideoWriter( &writer );
 
 
 
    cvReleaseCapture(&capture);
 
    cvReleaseImage(&img);
 
    cvReleaseImage(&img_temp);
debzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h06.


 
 
 
 
Partenaires

Hébergement Web