-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.cpp
130 lines (113 loc) · 3.15 KB
/
main.cpp
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
struct VideoUI {
Mat x;
vector<Point> v;
String nomFenetre = "Video";
};
void GestionCrayon(int evt, int x, int y, int type, void *extra);
int main(int argc, char **argv)
{
if (argc!=2)
{
cout << "Syntaxe :\n VideoSonde nomFichier.mp4";
return 0;
}
VideoCapture fVideo(argv[1]);
if (!fVideo.isOpened())
{
cout << argv[1] << "impossible d'utiliser ce fichier\n";
return 0;
}
VideoUI v;
fVideo>>v.x;
if (v.x.rows == 0)
{
cout << argv[1] << "problème dans le décodage ou image vide\n";
return 0;
}
double xEnd = fVideo.get(CAP_PROP_FRAME_COUNT);
cout << "Nombre d'images dans la vidéo : " << xEnd << "\n";
double fps = fVideo.get(CAP_PROP_FPS);
cout << "Nombre d'images pas seconde dans la vidéo : " << fps << "\n";
cout<<"taille image : "<<v.x.rows<< " lignes X "<<v.x.cols<<" colonnes\n";
int code=0;
namedWindow(v.nomFenetre);
setMouseCallback(v.nomFenetre, GestionCrayon, &v);
int indImage=0;
Mat y;
while (code != 27)
{
for (int i = 0; i < v.v.size(); i++)
{
circle(v.x, v.v[i], 5, Scalar(0,255,0), -1);
}
putText(v.x,format("%d",indImage),Point(50,50),FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255));
resize(v.x,y,Size(),2,2);
imshow(v.nomFenetre,y);
code = waitKey(30);
switch(code) {
case 'n':
indImage++;
if (indImage < xEnd)
{
fVideo.set(CAP_PROP_POS_FRAMES, indImage);
fVideo >> v.x;
}
break;
case 'p':
indImage--;
if (indImage >= 0)
{
fVideo.set(CAP_PROP_POS_FRAMES, indImage);
fVideo >> v.x;
}
break;
case 'N':
indImage+=10;
if (indImage < xEnd)
{
fVideo.set(CAP_PROP_POS_FRAMES, indImage);
fVideo >> v.x;
}
break;
case 'P':
indImage-=10;
if (indImage >= 0)
{
fVideo.set(CAP_PROP_POS_FRAMES, indImage);
fVideo >> v.x;
}
break;
case 'r':
{
fVideo.set(CAP_PROP_POS_FRAMES, 0);
ofstream fSonde;
fSonde.open("sonde.txt",ios_base::app);
if (fSonde.is_open())
{
for (int i=0;i<xEnd;i++)
{
fVideo >> v.x;
for (int j = 0; j < v.v.size(); j++)
{
Vec3i w= v.x.at<Vec3b>(v.v[j]);
fSonde<<i<< "\t" << v.v[j].x << "\t" << v.v[j].x << "\t" << w[0] << "\t" << w[1] << "\t" << w[2]<<"\n";
}
}
}
}
}
}
return 0;
}
void GestionCrayon(int evt, int x, int y, int type, void *extra)
{
VideoUI *v=(VideoUI*) extra;
if (type == EVENT_FLAG_LBUTTON)
{
v->v.push_back(Point(x/2, y/2));
}
}