comment fonctionne ce programme?

comment fonctionne ce programme? - C++ - Programmation

Marsh Posté le 03-01-2012 à 21:24:35    

bonjours mon prof d'info m'a donner ce programme qui a pour but de modifier une image pgm mais je ne sais pas le faire fonctionner les logiciels que j'utilise sont code blocks pour compiler le programme et the gimp pour ouvrir l'image en pgm depuis windows pourriezz vous m'aider a comprendre comment utiliser ce programme svp et merci d'avance pour vos reponses
 
Code :
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
//initialisation des diffÈrentes fonctions
string ident;
int largeur, hauteur, pixel_maxi, i, j, tab[600][600];
//fonction lecture
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;
    fin >> largeur >> hauteur;
    fin >> pixel_maxi;
    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;
}
    }
}
//fonction decoupe
void decoupe(){
    int x,y;
    // x = position en x   partir de laquelle la matrice sera dÈcoupÈe
    //y = position en y   partir de laquelle la matrice sera dÈcoupÈe
    cout<<"Le processus de decoupage se fait ainsi :"<<endl;
    cout<<"1) Vous choisissez le point sur la matrice a partir duquel aura lieu la decoupe (x et y)"<<endl;
    cout<<"2) Vous indiquez la largeur en valeur absolue qu'aura votre matrice (de gauche a droite a partir du point choisit plus haut)."<<endl;
    cout<<"3) Vous indiquez la hauteur en valeur absolue qu'aura votre matrice (de haut en bas a partir du point choisit plus haut)."<<endl<<endl;
    cout<<"Introduisez l'endroit o? commencer la dÈcoupe (x,y)"<<endl;
    cin >> x >> y;
    cout<<"Introduisez la largeur et la hauteur de la nouvelle image"<<endl;
    cin >> largeur >> hauteur;
    for (i=y ; i<(y+hauteur) ; i++){
for (j=x ; j<(x+hauteur) ;j++){
    tab[i-y][j-x]=tab[i][j];
}
    }
    cout<<"Image decoupee!"<<endl;
}
//fonction negatif  
void negatif(){
    for (i=0 ; i<hauteur ; i++){
for (j=0 ; j<largeur ; j++){
    tab[i][j] = (255)-(tab[i][j]);
}
    }
    cout << "Negatif produit" << endl;
}
//fonction quitter
void quitter() {
    cout << "Au revoir" << endl;
}
//fonction principale
int main (int argc, char * const argv []) {
    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) 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: quitter(); cout << endl; break; // on fait appel   la fonction quitter
}
if (numero>5 || numero<0){
    cout << "vous avez tappe un mauvais chiffre" <<endl;
    cout << endl;
}
    } while (numero != 5);
    system("pause" );
    return 0;
}

Reply

Marsh Posté le 03-01-2012 à 21:24:35   

Reply

Marsh Posté le 04-01-2012 à 21:13:35    

Qu'est-ce que tu ne comprends pas ? (mets les balises pour le code, c'est plus clair)


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 04-01-2012 à 21:29:24    

comment faire apparaitre l'image modifier sur the gimp en utilisant ce code

Reply

Marsh Posté le 04-01-2012 à 21:45:35    

Non, ce programme n'a aucun rapport avec the Gimp, c'est pas une DLL :D
 
Tout ce qu'il fait c'est un petit traitement tout seul comme un grand, le format qu'il manipule peut être lu sur Gimp mais c'est tout :D


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 04-01-2012 à 21:53:23    

mais alors comment afficher l'image une fois modifier??

Reply

Marsh Posté le 04-01-2012 à 22:23:05    

Le programme n'affiche aucune image, si tu veux qu'il le fasse il faut le modifier et y implémenter la SDL ou la SFML.
 
après, si tu veux voir une image après modification, tu peux aussi passer par the gimp en ouvrant le fichier pgm modifié


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 05-01-2012 à 11:21:15    

merci mais the gimp refuse de lire mon image une fois modifier et enregistrer car l'image enregistrer n'a pas de format et je ne sait pas comment lui donner le format png ou pgm merci de vos reponses

Reply

Marsh Posté le 11-12-2011 à 12:24:56    

bonjour j'ai un projet d'informatique à faire et je dois être capable de faire un tableau avec toutes les valeurs des pixels mais tout ce que je sais faire c'est ouvrir l'image avec the gimp. De plus je sais que je dois utiliser code blocks et coder en C++ pour écrire mon programme . Si quelqu'un peut m'aider ce serai sympas je suis un peu en retard sur mon projet merci.

Reply

Marsh Posté le 11-12-2011 à 14:57:11    

le format PGM est decrit clairement ici :
 
http://netpbm.sourceforge.net/doc/pgm.html
 
il rete juste a implanter l'algo pour lire le dit fichier. EN C++, penche toi du coté de ifstream/ofstream et vector pour le stockage en memoire.

Reply

Marsh Posté le 13-12-2011 à 12:56:54    

j'ai deja trouver ca sur internet ca correspond exactement a ce que je dois faire mais je ne comprend pas comment l'utiliser. Que dois-je faire avec mon image en pgm pour l'inclure dans le programme (j'ai bien vu la fonction lecture mais je ne comprend pas le fonctionnement).  merci de votre reponse  
 
 
 
 
[/#F0000E]
[#F0000E]
 
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
//initialisation des diffÈrentes fonctions
 
string ident;
int largeur, hauteur, pixel_maxi, i, j, tab[600][600];
 
//ident = Variable de dÈbut des fichiers pgm ou ppm
//largeur = largeur de la matrice du fichier pgm
//hauteur = hauteur de la matrice du fichier pgm
// pixel_maxi = chuiffre maximum qu'un pixel peut avoir
//i = ligne de la matrice
//j = colone de la matrice
//tab = tableau dans lequel on va placer les chiffres des pixels
 
 
//fonction lecture
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;
fin >> largeur >> hauteur;
fin >> pixel_maxi;
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;
}
}
}
 
//fonction decoupe
void decoupe(){
 
int x,y;
// x = position en x ‡ partir de laquelle la matrice sera dÈcoupÈe
//y = position en y ‡ partir de laquelle la matrice sera dÈcoupÈe
 
cout<<"Le processus de decoupage se fait ainsi :"<<endl;
cout<<"1) Vous choisissez le point sur la matrice a partir duquel aura lieu la decoupe (x et y)"<<endl;
cout<<"2) Vous indiquez la largeur en valeur absolue qu'aura votre matrice (de gauche a droite a partir du point choisit plus haut)."<<endl;
cout<<"3) Vous indiquez la hauteur en valeur absolue qu'aura votre matrice (de haut en bas a partir du point choisit plus haut)."<<endl<<endl;
cout<<"Introduisez l'endroit o˘ commencer la dÈcoupe (x,y)"<<endl;
cin >> x >> y;
cout<<"Introduisez la largeur et la hauteur de la nouvelle image"<<endl;
cin >> largeur >> hauteur;
for (i=y ; i<(y+hauteur) ; i++){
for (j=x ; j<(x+hauteur) ;j++){
tab[i-y][j-x]=tab[i][j];
}
}
cout<<"Image decoupee!"<<endl;
}
 
//fonction negatif  
void negatif(){
 
for (i=0 ; i<hauteur ; i++){
for (j=0 ; j<largeur ; j++){
tab[i][j] = (255)-(tab[i][j]);
}
}
cout << "Negatif produit" << endl;
}
 
//fonction quitter
void quitter() {
 
cout << "Au revoir" << endl;
}
 
 
 
//fonction principale
int main (int argc, char * const argv []) {
 
 
 
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) 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: quitter(); cout << endl; break; // on fait appel ‡ la fonction quitter
 
}
if (numero>5 || numero<0){
cout << "vous avez tappe un mauvais chiffre" <<endl;
cout << endl;
}
} while (numero != 5);  
 
 
system("pause" );
return 0;
}

Reply

Marsh Posté le 13-12-2011 à 12:56:54   

Reply

Marsh Posté le 13-12-2011 à 18:52:01    

Ben sous peine que ce programme marche (j'ai absolument pas vérifié), lorsque tu le lances un menu devrait apparaitre tu fais : "0" puis "Entrée", à ce moment là, il te demande le nom de ton image (qui doit se trouver dans le même répertoire que celui depuis lequel tu lances ton programme).
 
Une fois que tu lui a donné le nom, il charge l'image et retourne au menu de départ pour te permettre d'effectuer d'autres traitements (luminosité, découpe ...)
 
;)
 
[EDIT] D'ailleurs fait gaffe, la taille maximale de ton image (vu comment est conçu le programme) est de 600x600 pixels !


Message édité par skurlat le 13-12-2011 à 18:53:05
Reply

Marsh Posté le 13-12-2011 à 21:29:02    

merci beaucoup je vais essayer tout de suite

Reply

Marsh Posté le 15-12-2011 à 12:47:26    

bonjours je suis entrain de creer un programme en c++ pour le traitement d'une image format pgm et je cherche une fonction capable de pixeliser mon image en pixels de taille reglable.
donc si quelqu'un a une telle fonction ou sait comment la programmer je veux bien de l'aide merci.

Reply

Marsh Posté le 21-12-2011 à 11:37:24    

bonjours a tous jai réaliser un programme en c++ pour le traitement d'une image en pgm les differrentes fonctions de ce programme permette de lire l'image, l'enregistrer, inverser la valeur de pixels, de faire varier le luminosité et de découper l'image. Malheureusement il semblerait que jai fait des erreurs de programmation et malgrés mes nombreuses tentative je n'arrive pas a les comprendre et les trouver. Donc si vous vouliez bien m'aider a retrouver mes erreurs dans le code suivant je vous en serais reconnaissant merci.
 
 
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
//initialisation des diffÈrentes fonctions
 
string ident;
int largeur, hauteur, pixel_maxi, i, j, tab[600][600];
 
//ident = Variable de dÈbut des fichiers pgm ou ppm
//largeur = largeur de la matrice du fichier pgm
//hauteur = hauteur de la matrice du fichier pgm
// pixel_maxi = chuiffre maximum qu'un pixel peut avoir
//i = ligne de la matrice
//j = colone de la matrice
//tab = tableau dans lequel on va placer les chiffres des pixels
 
 
//fonction lecture
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;
fin >> largeur >> hauteur;
fin >> pixel_maxi;
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;
}
}
}
 
//fonction decoupe
void decoupe(){
 
int x,y;
// x = position en x ‡ partir de laquelle la matrice sera dÈcoupÈe
//y = position en y ‡ partir de laquelle la matrice sera dÈcoupÈe
 
cout<<"Le processus de decoupage se fait ainsi :"<<endl;
cout<<"1) Vous choisissez le point sur la matrice a partir duquel aura lieu la decoupe (x et y)"<<endl;
cout<<"2) Vous indiquez la largeur en valeur absolue qu'aura votre matrice (de gauche a droite a partir du point choisit plus haut)."<<endl;
cout<<"3) Vous indiquez la hauteur en valeur absolue qu'aura votre matrice (de haut en bas a partir du point choisit plus haut)."<<endl<<endl;
cout<<"Introduisez l'endroit o˘ commencer la dÈcoupe (x,y)"<<endl;
cin >> x >> y;
cout<<"Introduisez la largeur et la hauteur de la nouvelle image"<<endl;
cin >> largeur >> hauteur;
for (i=y ; i<(y+hauteur) ; i++){
for (j=x ; j<(x+hauteur) ;j++){
tab[i-y][j-x]=tab[i][j];
}
}
cout<<"Image decoupee!"<<endl;
}
 
//fonction negatif  
void negatif(){
 
for (i=0 ; i<hauteur ; i++){
for (j=0 ; j<largeur ; j++){
tab[i][j] = (255)-(tab[i][j]);
}
}
cout << "Negatif produit" << endl;
}
 
//fonction quitter
void quitter() {
 
cout << "Au revoir" << endl;
}
 
 
 
//fonction principale
int main (int argc, char * const argv []) {
 
 
 
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) 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: quitter(); cout << endl; break; // on fait appel ‡ la fonction quitter
 
}
if (numero>5 || numero<0){
cout << "vous avez tappe un mauvais chiffre" <<endl;
cout << endl;
}
} while (numero != 5);  
 
 
system("pause" );
return 0;
}

Reply

Marsh Posté le 21-12-2011 à 11:53:24    

banjo16 a écrit :

jai fait des erreurs de programmation


 
 :heink: mais quel genre d'erreurs ?? ça ne compile pas, ou ça marche mais une fonction ne fait pas ce que tu veux ? etc

Reply

Marsh Posté le 21-12-2011 à 12:07:19    

ca ne compile pas

Reply

Marsh Posté le 21-12-2011 à 12:11:53    

banjo16 a écrit :

ca ne compile pas

 

tu peux copier tes erreurs ? :)

 

sinon tu devrais indenter ton code, car il est illisible.


Message édité par in_your_phion le 21-12-2011 à 12:12:49
Reply

Marsh Posté le 21-12-2011 à 12:37:41    

je vous avoue que je ne suis que debutant dans la programmation je ne comprend pas ce que vous voulez dire par copier les erreur ni indenter mon code dsl

Reply

Marsh Posté le 21-12-2011 à 12:46:08    

après recherche de la définition de indenter voila mon code
 
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
//initialisation des diffÈrentes fonctions
string ident;
int largeur, hauteur, pixel_maxi, i, j, tab[600][600];
 
 
//fonction lecture
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;
fin >> largeur >> hauteur;
fin >> pixel_maxi;
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;
}
}
}
 
 
 
//fonction decoupe
void decoupe(){
int x,y;
// x = position en x ‡ partir de laquelle la matrice sera dÈcoupÈe
//y = position en y ‡ partir de laquelle la matrice sera dÈcoupÈe
cout<<"Le processus de decoupage se fait ainsi :"<<endl;
cout<<"1) Vous choisissez le point sur la matrice a partir duquel aura lieu la decoupe (x et y)"<<endl;
cout<<"2) Vous indiquez la largeur en valeur absolue qu'aura votre matrice (de gauche a droite a partir du point choisit plus haut)."<<endl;
cout<<"3) Vous indiquez la hauteur en valeur absolue qu'aura votre matrice (de haut en bas a partir du point choisit plus haut)."<<endl<<endl;
cout<<"Introduisez l'endroit o˘ commencer la dÈcoupe (x,y)"<<endl;
cin >> x >> y;
cout<<"Introduisez la largeur et la hauteur de la nouvelle image"<<endl;
cin >> largeur >> hauteur;
for (i=y ; i<(y+hauteur) ; i++){
for (j=x ; j<(x+hauteur) ;j++){
tab[i-y][j-x]=tab[i][j];
}
}
cout<<"Image decoupee!"<<endl;
}
 
 
 
//fonction negatif  
void negatif(){
for (i=0 ; i<hauteur ; i++){
for (j=0 ; j<largeur ; j++){
tab[i][j] = (255)-(tab[i][j]);
}
}
cout << "Negatif produit" << endl;
}
 
 
 
//fonction quitter
void quitter() {
cout << "Au revoir" << endl;
}
 
 
 
//fonction principale
int main (int argc, char * const argv []) {
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) 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: quitter(); cout << endl; break; // on fait appel ‡ la fonction quitter
}
if (numero>5 || numero<0){
cout << "vous avez tappe un mauvais chiffre" <<endl;
cout << endl;
}
} while (numero != 5);  
system("pause" );
return 0;
}

Reply

Marsh Posté le 21-12-2011 à 23:03:15    

banjo16 a écrit :

je vous avoue que je ne suis que debutant dans la programmation je ne comprend pas ce que vous voulez dire par copier les erreur

 

ben quand tu compiles, tu dois avoir des messages d'erreurs qui sont affichés ! :)

 

Si tu les as, ça devrait pas être très dur de voir pourquoi ton programme ne marche pas ...

 

indenter, c'est une règle de lisibilité qui consiste à mettre des tabulations pour chaque bloc de ton code, mais tu peux pas le faire avec les messages du forum je crois. Par contre tu peux utiliser la balise cpp

Code :
  1. int a = 2;



Message édité par in_your_phion le 21-12-2011 à 23:04:42
Reply

Marsh Posté le 03-01-2012 à 18:20:36    

bonjours mon professeur d'info nous a donnée un code qui devrait permettre de modifier de divers façon une image en pgm pour nous aidez a démarrer un projet d'informatique mais il semble que le code comporte des erreurs que je n'arrive pas a trouver donc si l'un d'entre vous pense pouvoir m'aider voila mon code je vous pris de bien vouloir y jeter un coup d'oeil merci.
ps: je comprendrait parfaitement que la lecture totale du code soit éprouvante n'hésiter donc pas a m'envoyer vos remarque sur le code meme sans avoir verifier son intégralité  
 
 

Code :
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. using namespace std;
  5. //initialisation des diffÈrentes fonctions
  6. string ident;
  7. int largeur, hauteur, pixel_maxi, i, j, tab[600][600];
  8. //fonction lecture
  9. void lecture(){
  10.     string nom_image; //variable du nom de l'image
  11.     cout << "Entrez le nom de l'image" << endl;
  12.     cin >> nom_image;
  13.     ifstream fin (nom_image.c_str());
  14.     fin >> ident;
  15.     fin >> largeur >> hauteur;
  16.     fin >> pixel_maxi;
  17.     for (i = 0; i<hauteur ;i++){
  18. for (j = 0; j<largeur; j++){
  19.     fin >> tab[i][j];
  20. }
  21.     }
  22.     cout<<"Image chargee"<<endl;
  23. }
  24. // fonction ecrire
  25. void ecrire(){
  26.     string image_sauvegardee;
  27.     cout << "Entrez le nom du fichier de sauvegarde" << endl;
  28.     cin >> image_sauvegardee;
  29.     ofstream fout (image_sauvegardee.c_str());
  30.     fout << ident << endl;
  31.     fout << largeur << " " << hauteur << endl;
  32.     fout << pixel_maxi << endl;
  33.     for (i=0 ; i<hauteur ; i++){
  34. for (j=0 ; j<largeur ; j++){
  35.     fout << tab[i][j] << " ";
  36. }
  37. fout<<endl;
  38.     }
  39. }
  40. //fonction luminositÈ
  41. void luminosite(){
  42.     int degre;
  43.     cout<<"Introduisez la valeur de votre changement de luminosite " << endl;
  44.     cout<<"(Introduisez un nombre negatif si vous voulez noircir.)" << endl;
  45.     cin>> degre;
  46.     for (i=0 ; i<hauteur ; i++){ //avec ces deux boucles for on va pouvoir rajouter ou enlever un certain nombre   tous les pixels
  47. for (j=0 ; j<largeur ; j++){
  48.     tab[i][j]=tab[i][j] + degre;
  49.     if (tab[i][j]<0){
  50.  tab[i][j]=0;
  51.     }
  52.     else if (tab[i][j]>255)
  53.  tab[i][j]=255;
  54. }
  55.     }
  56. }
  57. //fonction decoupe
  58. void decoupe(){
  59.     int x,y;
  60.     // x = position en x   partir de laquelle la matrice sera dÈcoupÈe
  61.     //y = position en y   partir de laquelle la matrice sera dÈcoupÈe
  62.     cout<<"Le processus de decoupage se fait ainsi :"<<endl;
  63.     cout<<"1) Vous choisissez le point sur la matrice a partir duquel aura lieu la decoupe (x et y)"<<endl;
  64.     cout<<"2) Vous indiquez la largeur en valeur absolue qu'aura votre matrice (de gauche a droite a partir du point choisit plus haut)."<<endl;
  65.     cout<<"3) Vous indiquez la hauteur en valeur absolue qu'aura votre matrice (de haut en bas a partir du point choisit plus haut)."<<endl<<endl;
  66.     cout<<"Introduisez l'endroit o? commencer la dÈcoupe (x,y)"<<endl;
  67.     cin >> x >> y;
  68.     cout<<"Introduisez la largeur et la hauteur de la nouvelle image"<<endl;
  69.     cin >> largeur >> hauteur;
  70.     for (i=y ; i<(y+hauteur) ; i++){
  71. for (j=x ; j<(x+hauteur) ;j++){
  72.     tab[i-y][j-x]=tab[i][j];
  73. }
  74.     }
  75.     cout<<"Image decoupee!"<<endl;
  76. }
  77. //fonction negatif  
  78. void negatif(){
  79.     for (i=0 ; i<hauteur ; i++){
  80. for (j=0 ; j<largeur ; j++){
  81.     tab[i][j] = (255)-(tab[i][j]);
  82. }
  83.     }
  84.     cout << "Negatif produit" << endl;
  85. }
  86. //fonction quitter
  87. void quitter() {
  88.     cout << "Au revoir" << endl;
  89. }
  90. //fonction principale
  91. int main (int argc, char * const argv []) {
  92.     int numero;
  93.     // numero = le chiffre entrÈ par l'utilisateur en fonction de son choix dans le menu
  94.     do {
  95. cout << "\t \t Menu" << endl;
  96. cout << endl;
  97. cout << "0) Charger une image" << endl;
  98. cout << "1) Sauvegarder une image" << endl;
  99. cout << "2) Changer la luminosite" << endl;
  100. cout << "3) Decouper l'image" << endl;
  101. cout << "4) Produire le negatif" << endl;
  102. cout << "5) Quitter" << endl;
  103. cout <<endl;
  104. cout << " Choisissez votre numero" << endl;
  105. cout << endl;
  106. cin >> numero;
  107. switch (numero){
  108. case 0: lecture (); cout << endl; break; // on fait appel   la fonction lecture
  109. case 1: ecrire(); cout<< endl; break; // on fait appel   la fonction ecrire
  110. case 2: luminosite(); cout << endl; break; // on fait appel   la fonction luminosite
  111. case 3: decoupe(); cout << endl; break; // on fait appel   la fonction decoupe
  112. case 4: negatif(); cout << endl; break; // on fait appel   la fonction negatif
  113. case 5: quitter(); cout << endl; break; // on fait appel   la fonction quitter
  114. }
  115. if (numero>5 || numero<0){
  116.     cout << "vous avez tappe un mauvais chiffre" <<endl;
  117.     cout << endl;
  118. }
  119.     } while (numero != 5);
  120.     system("pause" );
  121.     return 0;
  122. }


Message édité par gilou le 03-01-2012 à 18:54:23
Reply

Marsh Posté le 03-01-2012 à 19:18:41    

Je ne vois pas ce que ce code a d’erroné, je l'ai compilé et utilisé sur une image pgm test sans problème.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 03-01-2012 à 21:03:08    

merci beaucoup pour cette repose tres prompte mais pourrais tu m'expliquer comment l'utiliser a partir d'une image pgm classique et de CODE BLOCKS s'il te plait.

Reply

Marsh Posté le 03-01-2012 à 21:12:18    

REPONSE trés prompte dsl  
 

Reply

Marsh Posté le 03-01-2012 à 22:49:27    

Je ne sais pas ce que tu appelles une image PGM classique, j'ai juste récupéré l'exemple d'image de wikipédia, feep.pgm (qui affiche feep en nuances de gris):

P2
24 7
15
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
0  3  3  3  3  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0 15  0
0  3  3  3  0  0  0  7  7  7  0  0  0 11 11 11  0  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0  0  0
0  3  0  0  0  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0


Et ne n'ai pas eu le moindre problème avec (sauf que j'ai viré la seconde ligne du source de Wikipedia, un commentaire, vu que le programme de lecture manifestement n'en attend pas).
J'ai utilisé un des nombreux compilateurs C++ gratuits pour compiler le programme (celui de Digital Mars), sans rien faire de spécial.
Je l'ai compilé aussi avec g++ (mais alors il faut virer la ligne avec system, qui n'est pas dans le standard C++) et le programme a tout aussi bien marché.
Je n'utilise pas Code Blocs, dont je ne peux te renseigner à son sujet.
A+,


Message édité par gilou le 03-01-2012 à 22:52:05

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 03-01-2012 à 23:05:24    

merci beaucoup tu m'a vraiment aider pour une fois

Reply

Marsh Posté le 05-01-2012 à 11:28:39    

bonjours j'ai un programme qui a pour but de faire des modifications sur une image en pgm mais j'ai un probleme pour visualiser les images une fois modifiée. j'utilise the gimp pour visualiser les images mais une fois les images enregistrer the gimp refuse de les ouvrir. :fou: en effet une fois les images modifier elles n'ont pas de format je me demande donc comment les convertir en pgm ?ou alors peut etre qu'il y a une erreur dans mon code que je fais suivre merci de vos reponses
 
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
//initialisation des différentes fonctions
string ident;
int largeur, hauteur, pixel_maxi, i, j, tab[600][600];
 
 
//fonction lecture
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;
fin >> largeur >> hauteur;
fin >> pixel_maxi;
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;
}
}
}
 
 
 
//fonction decoupe
void decoupe(){
int x,y;
// x = position en x à partir de laquelle la matrice sera découpée
//y = position en y à partir de laquelle la matrice sera découpée
cout<<"Le processus de decoupage se fait ainsi :"<<endl;
cout<<"1) Vous choisissez le point sur la matrice a partir duquel aura lieu la decoupe (x et y)"<<endl;
cout<<"2) Vous indiquez la largeur en valeur absolue qu'aura votre matrice (de gauche a droite a partir du point choisit plus haut)."<<endl;
cout<<"3) Vous indiquez la hauteur en valeur absolue qu'aura votre matrice (de haut en bas a partir du point choisit plus haut)."<<endl<<endl;
cout<<"Introduisez l'endroit où commencer la découpe (x,y)"<<endl;
cin >> x >> y;
cout<<"Introduisez la largeur et la hauteur de la nouvelle image"<<endl;
cin >> largeur >> hauteur;
for (i=y ; i<(y+hauteur) ; i++){
for (j=x ; j<(x+hauteur) ;j++){
tab[i-y][j-x]=tab[i][j];
}
}
cout<<"Image decoupee!"<<endl;
}
 
 
 
//fonction negatif  
void negatif(){
for (i=0 ; i<hauteur ; i++){
for (j=0 ; j<largeur ; j++){
tab[i][j] = (255)-(tab[i][j]);
}
}
cout << "Negatif produit" << endl;
}
 
 
 
//fonction quitter
void quitter() {
cout << "Au revoir" << endl;
}
 
 
 
//fonction principale
int main (int argc, char * const argv []) {
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) 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: quitter(); cout << endl; break; // on fait appel à la fonction quitter
}
if (numero>5 || numero<0){
cout << "vous avez tappe un mauvais chiffre" <<endl;
cout << endl;
}
} while (numero != 5);  
system("pause" );
return 0;
}

Reply

Marsh Posté le 05-01-2012 à 13:19:10    

Les sujets suivant ont été fusionnés à ce sujet par Gilou

  • traitement d'image pgm c++
  • pixelisation image pgm
  • erreur programme en c++
  • code erroné c++ image pgm
  • probleme format d'image traitée


Parce qu'ici, on ne crée qu'un seul sujet par problème rencontré, et pas 6!!
A+,


Message édité par gilou le 05-01-2012 à 13:20:29

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-01-2012 à 14:06:03    

dsl

Reply

Marsh Posté le 05-01-2012 à 20:08:45    

DERNIER AVERTISSEMENT!
La prochaine fois que je vois un nouveau topic posant une fois de plus ce sujet (avec ou sans nouveau pseudo), c'est ban direct. Un seul topic par sujet, c'est la règle ici, comme déjà signalé.
A+,

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed