yezurof | Voila, j'ai un petit soucis dans une application que j'essaye de faire.
Je voudrais faire un programme qui prend une premiere image, calcul sa moyenne de rouge, vert, bleu,
puis ensuite parcourt un certain nombre d'autres images, et les modifie pour mettre les meme moyenne (le but étant d'uniformiser la luminosité de quelques centaines d'images d'un court metrage en stop motion)
Lorsque je teste mon embryon d'application sur des images en BMP, ca marche niquel...
Mais il ne veut pas prendre d'image JPG en entrée, alors que Qt est sensé supporter ce format sans problème... J'ai d'ailleur dans le dossier plugins du Qt les fichier permettant normalement de gerer le JPG.
Bon, voila le code, puis si quelqun pouvait m'aider, ca serait gentil ^^
Code :
- #include <iostream>
- #include <QString>
- #include <QImage>
- #include <QColor>
- #include <QMessageBox>
- #include <QApplication>
- int main(int argc, char* argv[])
- {
- int r, g, b; //couleur de reference
- int rn, gn, bn; //couleur de notre image en cour
- int rdif, gdif, bdif; //différence entre nos couleur de départ et les nouvelle
- int i, j, k, x; //i et j et k servent au boucle, x compte le nombre de passage dans la boucle
- int v; //une valeure tampon pour mes changements de photo
- int longueur, largeur; //taille de notre image
- QImage* image; //notre image
- QString nom, tampon; //variable servant a loader les images
- QRgb color; //sert a recuperer la couleure d'un pixel
- QApplication app(argc, argv);
- /*on recupere le nom de fichier passé en argument
- puis on construit notre premiere image a partir de ce nom*/
- //nom = new QString(argv[1]);
- nom = "bouh.jpg";
- image = new QImage(nom);
- /************************************
- taille d'images fixées en dur. A automatiser
- ************************************/
- largeur = 3072;
- longueur = 2304;
- /*on calcul nos moyenne de r,g,b*/
- r = 0;
- g = 0;
- b = 0;
- x=0;
- for(i=0;i<largeur/2; i=i+50)
- {
- color = image->pixel(i,i);
- r = r + qRed(color);
- g = g + qGreen(color);
- b = b + qBlue(color);
- x++;
- }
- r = r/x;
- g = g/x;
- b = b/x;
- /**************************
- on load notre deuxieme image...
- pour plus tard: demander a l'utilisateur le nombre d'image
- *****************************/
- nom="DSCF2429.jpg";
- for(k=0;k<2;k++)
- {
- image->load(nom);
- //on calcul la moyenne de la deuxieme image
- rn = 0;
- gn = 0;
- bn = 0;
- x=0;
- for(i=0;i<largeur/2; i=i+50)
- {
- color = image->pixel(i,i);
- rn = rn + qRed(color);
- gn = gn + qGreen(color);
- bn = bn + qBlue(color);
- x++;
- }
- rn = rn/x;
- gn = gn/x;
- bn = bn/x;
- /***********************************
- on calcul les différences
- ***********************************/
- rdif = r - rn;
- gdif = g - gn;
- bdif = b - bn;
- //QMessageBox::information(NULL,"deplacement", QString::number(rdif));
- //on modifie la deuxieme image en fonction de nos variables dif
- for(i=0;i<largeur;i++)
- {
- for(j=0;j<longueur;j++)
- {
- color = image->pixel(i,j); //on recupere la couleur du pixel a mosifier
- //on vérifie qu'on ne passe pas en couleure négative
- if((qRed(color)+rdif)<255)
- { rn = qRed(color)+rdif; }
- else
- { rn = 255; }
- if((qGreen(color)+gdif)<255)
- { gn = qGreen(color)+gdif; }
- else
- { gn = 255; }
- if((qBlue(color)+bdif)<255)
- { bn = qBlue(color)+bdif; }
- else
- { bn = 255; }
- //on modifie le pixel
- color = qRgb(rn, gn, bn);
- image->setPixel(i,j,color);
- }
- }
- QMessageBox::information(NULL,"deplacement", "on va sauvegarder" );
- //on sauvegarde l'image
- image->save(nom);
- QMessageBox::information(NULL,"deplacement", "j'ai fini" );
- //on passe a l'image sivante en incrémentant les numero de 1
- tampon = nom.left(8);
- tampon = tampon.right(4);
- v = tampon.toUInt();
- v++;
- tampon = QString::number(v); //contien les 4 chiffre
- tampon += nom.right(4); //contien les 4 chiffre + le .bmp
- nom = nom.left(4); //contient les 4 lettre de gauches
- nom += tampon; //contient le nouveau nom de fichier
- }
- return app.exec();
- }
|
|