Bonjour à tous!

Comme l'indique le titre j'ai un soucis de traitement d'images (si je ne suis pas dans la bonne section, dites le )

Voilà dans le cadre d'un projet avec un collègue,nous voulons (et maintenant devons) faire un système ambilight pour pc (pour ceux qui ne connaissent pas,c'est un dispositif qui recréé une lumière d'ambiance, avec des lampes de couleurs mises derriere un écran,à paritr des images qui passent sur cet écran). Pour cela, on a besoin de connaître la valeur RGB de chaque pixels composant une image, faire des moyennes sur des zones que nous avons délimité et faire ça sur toutes les frames de la vidéo.

On a suivis un tutoriel sur la base de lecture video avec openCV, on a fait un code pour récupérer les valeurs RGB on a mixé le tout en faisant les modif appropriées(peut être pas finalement si le prog ne tourne pas correctement), le programme s'execute mais plante au bout d'une 40aine de frame et on comprend pas pourquoi (il n'y a pas d'erreurs à la compilation, sauf pour la ligne 51 où on a un warning:
"C:/Program Files/CodeBlocks/OPENCV Capture et acquisition ok/main.cpp:51: warning: left-hand operand of comma expression has no effect")

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
 
#include <highgui.h>
#include <cv.h>
#include <cxcore.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
 
 
int main()
{
    // Image qui contiendra les frames de la vidéo
    IplImage* img = cvCreateImage(cvSize(128,96), IPL_DEPTH_8U, 3);
 
 
     char filename[200];//fichier vidéo
 
     int i;//coordonnées des pixels
     int j;
 
 
  double moyB1, moyB2, moyB3, moyB4, moyB5, moyB6, moyB7, moyB8, moyB9, moyB10;//variables pour pouvoir stocker la moyenne de chaque couleur de chaque zone
  double moyG1, moyG2, moyG3, moyG4, moyG5, moyG6, moyG7, moyG8, moyG9, moyG10;
  double moyR1, moyR2, moyR3, moyR4, moyR5, moyR6, moyR7, moyR8, moyR9, moyR10;
 
 
  double somRed, somGreen, somBlue;//sommes pour les calculs de moyennes
 
  moyB1=moyB2=moyB3=moyB4=moyB5=moyB6=moyB7=moyB8=moyB9=moyB10=0;
  moyG1=moyG2=moyG3=moyG4=moyG5=moyG6=moyG7=moyG8=moyG9=moyG10=0;
  moyG1=moyG2=moyG3=moyG4=moyG5=moyG6=moyG7=moyG8=moyG9=moyG10=0;
 
  somRed=somGreen=somBlue=0;
 
 
    printf("\t ---BONJOUR ET BIENVENUE SUR LE PROGRAMME D'ASSISTANCE AMBILIGHT--- \n");
    printf("Entrer le chemin d'acces de la video et son nom \n (sous la forme C:\\Program Files\\Mavideo.avi) \n  Chemin d'acces: ");
    gets(filename);
 
 
    // La capture vidéo, ici, un fichier :
    CvCapture* capture = cvCreateFileCapture(filename);
 
 
 
    // On vérifie que la capture est bien initialisée,
    // si ce n'est pas le cas, on quitte le programme.
    if( !capture )
        return 10;
 
    cvNamedWindow("video", (128,96));//l'image est limitée à une résolution de 128*96 pour augmenter la rapidité des calculs
    double key = ' ';
 
   struct CvScalar s;
   s = cvScalar( s.val[0], s.val[1],s.val[2]);//fonction de capture de couleurs
 
 
 do
    {
 
     img = cvQueryFrame(capture);//on capture et décompresse la frame
 
     i=j=0; //initialisation des coordonnées en début de chaque boucle
 
 
 
            for(i=0; i<15; i++)  //moyenne des données sur la zone 1
 
                {
                         for(j=0;j<20;j++)
                           {
                            s = cvGet2D(img, i, j);
                            somBlue = somBlue + s.val[0];
                            somGreen = somGreen + s.val[1];
                            somRed = somRed + s.val[2];
                        }
                }
                moyR1 = somRed/300; //moyenne de la couleur rouge sur la première zone
                moyG1 = somGreen/300;//moyenne de la couleur verte sur la première zone
                moyB1 = somBlue/300;//moyenne de la couleur bleue sur la première zone
 
 
                somRed = somGreen = somBlue = 0;//mise à 0 des sommes pour la zone suivante
 
                printf("MoyR1=%0.1f    MoyG1=%0.1f    MoyB1=%0.1f\n\n",moyR1,moyG1,moyB1);//affichage des moyennes pour vérifier le bon fonctionnement du traitement
 
             for(i=0; i<15; i++) //moyenne des données sur la zone 2
                {
                    for(j=20;j<64;j++)
                        {
                            s = cvGet2D(img, i, j);
                            somBlue = somBlue + s.val[0];
                            somGreen = somGreen + s.val[1];
                            somRed = somRed + s.val[2];
                        }
                }
                moyR2 = somRed/660;
                moyG2 = somGreen/660;
                moyB2 = somBlue/660;
 
                somRed = somGreen = somBlue = 0;
 
                printf("MoyR2=%0.1f    MoyG2=%0.1f     MoyB2=%0.1f \n\n",moyR2,moyG2,moyB2);
 
              for(i=0; i<15; i++)//moyenne des données sur la zone 3
                {
                    for(j=64;j<108;j++)
                        {
                            s = cvGet2D(img, i, j);
                            somBlue = somBlue + s.val[0];
                            somGreen = somGreen + s.val[1];
                            somRed = somRed + s.val[2];
                        }
                }
                moyR3 = somRed/660;
                moyG3 = somGreen/660;
                moyB3 = somBlue/660;
 
                somRed = somGreen = somBlue = 0;
 
                printf("MoyR3=%0.1f     MoyG3=%0.1f      MoyB3=%0.1f \n\n",moyR3,moyG3,moyB3);
 
               for(i=0; i<15; i++)//moyenne des données sur la zone 4
                {
                   for(j=108;j<128;j++)
                        {
                            s = cvGet2D(img, i, j);
                            somBlue = somBlue + s.val[0];
                            somGreen = somGreen + s.val[1];
                            somRed = somRed + s.val[2];
                        }
                }
                moyR4 = somRed/300;
                moyG4 = somGreen/300;
                moyB4 = somBlue/300;
 
                somRed = somGreen = somBlue = 0;
 
                printf("MoyR4=%0.1f     MoyG4=%0.1f     MoyB4=%0.1f \n\n",moyR4,moyG4,moyB4);
 
                for(i=15; i<48; i++)  //moyenne des données sur la zone 5
                {
                    for(j=0;j<20;j++)
                        {
                             s = cvGet2D(img, i, j);
                            somBlue = somBlue + s.val[0];
                            somGreen = somGreen + s.val[1];
                            somRed = somRed + s.val[2];
                        }
                }
                moyR5 = somRed/660;
                moyG5 = somGreen/660;
                moyB5 = somBlue/660;
 
                somRed = somGreen = somBlue = 0;
 
                printf("MoyR5=%0.1f     MoyG5=%0.1f     MoyB5=%0.1f \n\n",moyR5,moyG5,moyB5);
 
                 for(i=15; i<48; i++)//moyenne des données sur la zone 6
                {
                     for(j=108;j<128;j++)
                        {
                             s = cvGet2D(img, i, j);
                            somBlue = somBlue + s.val[0];
                            somGreen = somGreen + s.val[1];
                            somRed = somRed + s.val[2];
                        }
                }
                moyR6 = somRed/660;
                moyG6 = somGreen/660;
                moyB6 = somBlue/660;
 
                somRed = somGreen = somBlue = 0;
 
                printf("MoyR6=%0.1f      MoyG6=%0.1f      MoyB6=%0.1f \n\n",moyR6,moyG6,moyB6);
 
                 for(i=48; i<81; i++) //moyenne des données sur la zone 7
                {
                    for(j=0;j<20;j++)
                        {
                             s = cvGet2D(img, i, j);
                            somBlue = somBlue + s.val[0];
                            somGreen = somGreen + s.val[1];
                            somRed = somRed + s.val[2];
                        }
                }
                moyR7 = somRed/660;
                moyG7 = somGreen/660;
                moyB7 = somBlue/660;
 
                somRed = somGreen = somBlue = 0;
 
                printf("MoyR7=%0.1f      MoyG7=%0.1f      MoyB7=%0.1f \n\n",moyR7,moyG7,moyB7);
 
                 for(i=48; i<81; i++) //moyenne des données sur la zone 8
                {
                    for(j=108;j<128;j++)
                        {
                            s = cvGet2D(img, i, j);
                            somBlue = somBlue + s.val[0];
                            somGreen = somGreen + s.val[1];
                            somRed = somRed + s.val[2];
                        }
                }
                moyR8 = somRed/660;
                moyG8 = somGreen/660;
                moyB8 = somBlue/660;
 
                somRed = somGreen = somBlue = 0;
 
                printf("MoyR8=%0.1f     MoyG8=%0.1f      MoyB8=%0.1f \n\n",moyR8,moyG8,moyB8);
 
 
                 for(i=81; i<96; i++) //moyenne des données sur la zone 9
                {
                    for(j=0;j<20;j++)
                        {
                             s = cvGet2D(img, i, j);
                            somBlue = somBlue + s.val[0];
                            somGreen = somGreen + s.val[1];
                            somRed = somRed + s.val[2];
                        }
                }
                moyR9 = somRed/300;
                moyG9 = somGreen/300;
                moyB9 = somBlue/300;
 
                somRed = somGreen = somBlue = 0;
 
                printf("MoyR9=%0.1f     MoyG9=%0.1f   MoyB9=%0.1f \n\n",moyR9,moyG9,moyB9);
 
                  for(i=81; i<96; i++) //moyenne des données sur la zone 10
 
                {
                    for(j=108;j<128;j++)
                         {
                             s = cvGet2D(img, i, j);
                            somBlue = somBlue + s.val[0];
                            somGreen = somGreen + s.val[1];
                            somRed = somRed + s.val[2];
                        }
                }
                moyR10 = somRed/300;
                moyG10 = somGreen/300;
                moyB10 = somBlue/300;
 
                somRed = somGreen = somBlue = 0;
 
                printf("MoyR10=%0.1f      MoyG10=%0.1f    MoyB10=%0.1f \n\n",moyR10,moyG10,moyB10);
 
        // ... et on la montre à l'écran.
       cvShowImage( "video", img);
 
        // On attend 10 ms : IMPORTANT !
        key = cvWaitKey(10);
 
 
 
    // Tant qu'on n'a pas appuyé sur Q, on continue:
    }  while(key != 'q');
 
    // On détruit les fenêtres créées : nouvelle fonction. ;)
    cvDestroyAllWindows();
 
    // On n'a pas besoin de détruire l'image.
        img = NULL;
 
    // On détruit la capture
    cvReleaseCapture( &capture );
 
    return 0;
}
Lorsque on execute le programme, au bout d'un moment il sort avec une erreur 0xc0000005 qui semble être un problème d'overflow mais on ne vois pas où :s
Pouvez vous nous éclairer sur ce plantage s'il vous plaît?

Ha oui aussi: quand on limite le nombre de zone ça plante aussi mais plus loin...

Merci par avance pour vos réponses(et désolé pour le roman) !

EEALY