Projet traitement image.

vpolo4 Messages postés 2 Date d'inscription mercredi 23 novembre 2011 Statut Membre Dernière intervention 13 décembre 2011 - 11 déc. 2011 à 13:56
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 15 déc. 2011 à 10:14
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

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
11 déc. 2011 à 14:50
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...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 déc. 2011 à 08:50
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
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
12 déc. 2011 à 09:16
@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...
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 déc. 2011 à 10:09
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
12 déc. 2011 à 10:35
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...
0
vpolo4 Messages postés 2 Date d'inscription mercredi 23 novembre 2011 Statut Membre Dernière intervention 13 décembre 2011
13 déc. 2011 à 20:01
@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 :)
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
15 déc. 2011 à 10:14
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...
0
Rejoignez-nous