Bonjour à tous,
J'ai fait un petit programme me servant à redimensionner les images d'un répertoire, et à les renommer.
ça marche assez bien, mais pour les dossiers où il y a beaucoup de beaucoup de photos, ça plante... Je finis par avoir un message d'erreur me disant à peu près :
Insufficient memory (out of memory), error in function cvAlloc (C:\\...\cxalloc.cpp)
Voici (en gros) le code
La fonction redim (redim2 appelle redim() et en plus écrit un fichier HTML)
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 IplImage *Img_in ; IplImage *Img_out; int main(int argc, char** argv) { WIN32_FIND_DATA File; HANDLE hSearch; BOOL re; char image_in[50]; char image_out[100]; char image_out2[100]; char repertoire[100]; char temp[100]; char repertoire_mini[100]; /* Le resultat recherche : un nombre. */ int nombre_deb = 1; /* Un booleen pour savoir si la chaine est valide. */ int ret = 0; /* choix de divers paramètres : dossier, nom de renommage... pas très important je pense par rapport au problème */ //recherche des images jepg du dossier hSearch=FindFirstFile("*.jpg", &File); if(hSearch == INVALID_HANDLE_VALUE) { printf("Aucune image trouvee.\n"); return FALSE; } re=TRUE; do { /* construction du nom des images d'entrée (image_in) et de sortie (image_out et image_out2) */ printf("%s %s\n",image_in,image_out); //on redimensionne en 1024*1024 redim(1024,1024, image_in,image_out, Img_in, Img_out); //on crée la miniature et le fichier HTML associé a l'image redim2(100,100, image_out,image_out2, Img_in, Img_out); re = FindNextFile(hSearch, &File); } while(re); FindClose(hSearch); cvReleaseImage(&Img_in); cvReleaseImage(&Img_out); return 0; }
Voilà où j'en suis... je soupçonne fortement un problème lié à l'allocation de mémoire de Img_in et Img_out, mais je ne sais pas comment le résoudre...
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 int redim(float l_max, float h_max, char* img_in, char* img_out, IplImage *Img_in, IplImage *Img_out) { int l_in, h_in; int l_out, h_out; float test_h, test_l; CvSize taille_image_in; Img_in = cvLoadImage(img_in,CV_LOAD_IMAGE_COLOR); Img_out = 0;//cvLoadImage(img_in,CV_LOAD_IMAGE_COLOR); if (!Img_in){ printf("Could not load image file\n"); return -1; } /* divers calculs concernant le redimensionnement */ Img_out = cvCreateImage(cvSize(l_out, h_out),Img_in->depth, Img_in->nChannels); int TYPE_ALGO = CV_INTER_NN; cvResize(Img_in,Img_out,TYPE_ALGO); } if (!cvSaveImage(img_out, Img_out)) printf("Could not save: %s\n"); return 0; }
Si quelqu'un peut m'aider, c'est cool ^^
Merci d'avance !
Partager