-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcapturevideo.c
86 lines (72 loc) · 2.08 KB
/
capturevideo.c
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
// Programme permettant de récupérer une video par la webcam
// sous forme d'une série d'images tiff
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
CvCapture *capture = NULL;
IplImage *frame = NULL;
unsigned int compteur = 0, source = 0, ncams;
char c, file[60], basename[51], ext[5];
int isFilming = 0;
double t;
ncams = (argc == 2 ? atoi(argv[1]) : 1);
capture = cvCaptureFromCAM(source);
printf("Programme de capture de video depuis une webcam\n\n");
printf("Commandes :\n");
printf("\tq : quitter\n");
printf("\tc : cycler au travers des différentes webcam coonectées\n");
printf("\t\t(ne marche que quand le film n'est pas en cours d'acquisition\n");
printf("\tEspace : commencer/areter de filmer\n\n");
printf("\t\tPasser en argument le nombre de webcams si plus d'une.\n\n\n");
printf("\n\nNom de la série d'images : ");
scanf("%s", basename);
printf("\nExtension des images : ");
scanf("%s", ext);
cvNamedWindow("Capture", 0);
t = (double) cvGetTickCount();
while (1)
{
// On récupère une image
frame = cvQueryFrame(capture);
if(frame==NULL)
{
printf("Impossible de lire l'image !\n");
}
else
{
// On l'affiche dans la fenêtre
cvShowImage("Capture", frame);
c = (char)cvWaitKey(5);
// On gère l'appui sur une touche du clavier
if (c=='q') break;
switch (c)
{
case 'c' :
if (!isFilming)
{
source = (source + 1 ) % ncams;
cvReleaseCapture(&capture);
capture = cvCaptureFromCAM(source);
break;
}
case ' ' :
isFilming = !isFilming;
}
// Si on doit filmer, on vérifie qu'il est temps de prendre une image
// On filme a 25 images par secondes
if (isFilming && ((double)cvGetTickCount() - t >= 0.04))
{
// On prend une image et on remet à jour le compteur de temps
compteur++;
sprintf(file, "%s%.3d.%s", basename, compteur, ext);
cvSaveImage(file, frame);
}
}
}
cvReleaseCapture(&capture);
cvDestroyWindow("Capture");
return 0;
}