Projet traitement image.

Signaler
Messages postés
2
Date d'inscription
mercredi 23 novembre 2011
Statut
Membre
Dernière intervention
13 décembre 2011
-
Messages postés
14814
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 octobre 2020
-
Bonjour,
Dans le cadre de mon cursus d'ingénieur, je dois réaliser un projet en C++ sur le traitement d'image, c'est à dire réaliser une interface sur la console afin d'ouvrir une image, lui affecté des modifications (flou, negatif...) et la ré-enregistrer. j'ai déjà crée l'interface, obtenu les codes sources mais quelque chose ne marche pas, j'ai oublier quelque chose, comme si chaque void ne renvoyer rien. Pourriez vous regarder ce qui ne va pas si vous avez un peu temps de libre (je n'ai pas mis tout le code par soucis de place et de clarté)
Merci d'avance


#include
#include <fstream>
#include <string>

using namespace std;

//initialisation des différentes fonctions

string ident,comment;
int largeur, hauteur, pixel_maxi, i, j;
int tab[1200][1200];
char unoctet ;

//ident = Variable de début des fichiers pgm ou ppm (magic code)
//largeur = largeur de la matrice du fichier pgm
//hauteur = hauteur de la matrice du fichier pgm
// pixel_maxi = valeur maximum qu'un pixel peut avoir
//i = ligne de la matrice du bitmap
//j = colonne de la matrice du bitmap
//tab = tableau dans lequel on va placer les chiffres des pixels



//fonction chargement
void lecture(){
string nom_image; //variable du nom de l'image
cout << "Entrez le nom de l'image" << endl;
cin >> nom_image;
ifstream fin (nom_image.c_str());
fin >> ident;
if (ident != "P5") { cout << "type d’image non traitée " <<endl ;
return ; // modifier selon le type
}
//fin.get(unoctet) ;

fin >> largeur >> hauteur;
fin >> pixel_maxi;
cout << "largeur "<< largeur<< "hauteur "<< hauteur << endl;
for (i = 0; i<hauteur ;i++){
for (j = 0; j<largeur; j++){
fin >> tab[i][j];
}
}
cout<<"Image chargee"<<endl;
}

// fonction ecrire
void ecrire(){
string image_sauvegardee;

cout << "Entrez le nom du fichier de sauvegarde" << endl;
cin >> image_sauvegardee;
ofstream fout (image_sauvegardee.c_str());
fout << ident << endl;
fout << largeur << " " << hauteur << endl;
fout << pixel_maxi << endl;
for (i=0 ; i<hauteur ; i++){
for (j=0 ; j<largeur ; j++){
fout << tab[i][j] << " ";
}
fout<<endl;
}
}

//fonction luminosité
void luminosite(){
int degre;
cout<<"Introduisez la valeur de votre changement de luminosite " << endl;
cout<<"(Introduisez un nombre negatif si vous voulez noircir.)" << endl;

cin>> degre;

for (i=0 ; i<hauteur ; i++){ //avec ces deux boucles for on va pouvoir rajouter ou enlever un certain // nombre à tous les pixels
for (j=0 ; j<largeur ; j++){
tab[i][j]=tab[i][j] + degre;

if (tab[i][j]<0){ tab[i][j]=0; }
else if (tab[i][j]>255) tab[i][j]=255;
} // fin if < 0
} // fin for j
} // fin for i


//fonction principale pour montrer un exemple de menu
int main () {

int numero;
// numero = le chiffre entré par l'utilisateur en fonction de son choix dans le menu

do {
cout << "\t \t Menu" << endl;
cout << endl;
cout << "0) Charger une image" << endl;
cout << "1) Sauvegarder une image" << endl;
cout << "2) Changer la luminosite" << endl;
cout << "3) Decouper l'image" << endl;
cout << "4) Produire le negatif" << endl;
cout << "5) Produire un flou gaussien" << endl;
cout << "6) quitter" << endl;
cout <<endl;
cout << " Choisissez votre numero" << endl;
cout << endl;

cin >> numero;

switch (numero){
case 0: lecture (); cout << endl; break; // on fait appel à la fonction lecture
case 1: ecrire(); cout<< endl; break; // on fait appel à la fonction ecrire
case 2: luminosite(); cout << endl; break; // on fait appel à la fonction luminosite
case 3: decoupe(); cout << endl; break; // on fait appel à la fonction decoupe
case 4: negatif(); cout << endl; break; // on fait appel à la fonction negatif
case 5: gaussien(); cout << endl; break; // on fait appel à la fonction flou gaussien
case 6: quitter(); cout << endl; break; // on fait appel à la fonction quitter
}
if (numero>6 || numero<0){
cout << "vous avez tape un mauvais choix" <<endl;
cout << endl;
}
} while (numero != 6);
return 0;
}

7 réponses

Messages postés
14814
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 octobre 2020
93
Hello,
Je n'ai pas regardé le code (merci, d'ailleurs, d'utiliser les balises "code" pour une meilleure lisibilité) mais j'ai quelques remarques:
j'ai déjà crée l'interface, obtenu les codes sources mais quelque chose ne marche pas

Pourquoi tu écris "obtenu"? N'aurais-tu pas fait tes devoirs? . Ensuite, "quelque chose ne marche pas..." J'ai bien commandé une boule de cristal mais elle n'est pas encore arrivée...Pourrais-tu nous en dire plus?

comme si chaque void ne renvoyer rien.

Toi, tu as loupé des cours C'est le principe de void :
void maMethode(int param);

--> ça signifie que la méthode maMethode ne retourne rien

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
vive le crash si ton image dépasse les 1200x1200 ...

n'as tu pas besoin de skipws ?
les specs du format pgm prévoient la possibilité d'avoir des commentaires... tu ne les gère pas.

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
14814
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 octobre 2020
93
@Renfield: on est dans un cadre scolaire Les images sont connues (pas plus grande que 512x512 je pense) et les commentaires sont inutiles.
Après, je suis d'accord que ce n'est pas géré mais, pour son usage, on va dire que c'est du bonus.


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
66
Je serai prof, je me ferai un malin plaisir de donner des points a ceux qui auraient géré cette eventualité.

ne serait-ce que de dire : image trop grande quand le cas se présente


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
14814
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 octobre 2020
93
Certes. Mais ça reste du bonus


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
2
Date d'inscription
mercredi 23 novembre 2011
Statut
Membre
Dernière intervention
13 décembre 2011

@bruno:

En réalité mon projet informatique consiste en un travail de recherche et donc de récuperer des sources, afin de le modifiés et de les adapter pour que tout cela puisse fonctionner dans une interface.

En effet, je me suis mal expliqué sur les difficultés que je rencontre, mes connaissances en informatique sont assez basiques donc je vais essayer d'etre clair.
Chaque fonction est codée correctement je pense mais on dirait qu'elles ne communiquent pas bien ensemble. Après execution du programme, l'image à subit une modification, ce qui (je pense) montre qu'il y a bien de l'interaction entre le menu et les fonctions, mais lorsque on ouvre l'image, ce n'est plus qu'une alternance de lignes grises et noires.

Pour ce qui est de skipws, c'est peut etre un peu trop compliqué pour moi et les images que j'utilise sont connus :)
Messages postés
14814
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 octobre 2020
93
Après relecture, je pense que tu veux nous dire que tu n'arrives pas à passer des paramètres aux fonctions. C'est bien ça?
Je te propose donc de commencer par écrire une classe Image, qui contiendra certains membres tel la taille, le type d'images, la matrice de pixels, etc. et des méthodes tel lecture(), ecriture(),...
Regarde ma source traitant des fichiers BMP par exemple.


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...