IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Ouvrir image PGM


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 42
    Par défaut Ouvrir image PGM
    Bonjour je souhaite réaliser un programme qui me permettrait d'ouvrir et de manipuler une image pgm (en niveau de gris), cependant je ne sait pas comment lire les valeur des pixels du de l'image qui apparaissent dans le fichier sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ƾ«¸¾¼*«¶ÀÀÀµ²´
    quand je l'ouvre avec un editeur de texte

    Voici mon code
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    #include <string>
    #include <iostream>
    #include <fstream>
     
    using namespace std;
     
    unsigned char * lireImage(FILE * fic_image)
    {
    	unsigned char *image;
    	char * buf=new char [255];
    	int ligne=1;
    	int i=1;
    	string heigh="";
    	string width="";
    	string chaine="";
     
    	fread(&buf[i],1,1,fic_image);
     
    	while( ligne<4){
    		if(buf[i]=='\n') {
    			ligne++;
    			i++;
    			fread(&buf[i],1,1,fic_image);
    		}
    		if(buf[i]=='#') {
    			while (buf[i]!='\n'){
    				i++;
    				fread(&buf[i],1,1,fic_image);
    			}
    		}
    		if (ligne==2)
    		{
    			if (buf[i]!='\n'){
    				chaine=chaine+buf[i];
    			}
    			i++;
    			fread(&buf[i],1,1,fic_image);
    		}
    		else
    		{
    			i++;
    			fread(&buf[i],1,1,fic_image);
    		}
    	}
    	for (int j=0;j<(chaine.length()/2);j++){
    		heigh= heigh + chaine[j];
    	}
    	for (int j=((chaine.length()/2)+1);j<chaine.length();j++){
    		width= width + chaine[j];
    	}
     
     
    	image = (unsigned char*)calloc(512 * 512 ,sizeof(unsigned char));
     
    	for (int j=0;j<512*512;j++){
     
    		fread(&image[i],1,1,fic_image);
    		//cout << "image[i] = "<< i << "\n";	
    		i++;
    	}
     
     
     
     
        fclose(fic_image);
    	return image;
     
     
    }
    FILE * ouvrirFichier(char* nomFichier)
    {
    	FILE * fic_image;
    	fic_image = fopen(nomFichier,"rb");
     
    	if (fic_image == NULL)
    	{
    	cout <<"Erreur a l'ouverture de l'image \n"	;
           	exit(0);
    	}
    	else	cout <<"Image ouverte avec succes \n";
     
    	return fic_image;
    }
     
     
    void EcrireImage(unsigned char* image, int taille, char* NomImage)
    {
     
        FILE * fic_image = fopen(NomImage,"wb");
     
        if (fic_image == NULL)
        {
            printf("Erreur a la creation de l'image \n");
            exit(0);
        }
        else
            printf("Image cree avec succes \n");
     
        for(int i=1;i<=taille;i++)
                fwrite(&image[i],1,1,fic_image);
     
        fclose(fic_image);
    }
     
     
    int main(){
    FILE * fic_image = ouvrirFichier("./test.pgm");
    unsigned char * I=lireImage(fic_image);
     
    EcrireImage ( I,512*512,"test2.pgm");//marche pas (entete)
     
     
    return 0;
    }
    je voudrais bien afficher au moins la valeur des pixels a l'aide d'un "std::cout" mais je n'y comprend vraiment rien , je ne sias pas vraiment ce que je récupère lorsque je lit le fichier.
    La lecture de l'entete reste a améliorer (je galere bien avec les lecture de fichiers), mais l'essentiel est pour le momment d'obtenir une matrice des pixels,


    merci de votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Si t'inclues <fstream>, pourquoi tu l'utilises pas ?
    A part ça, y'a pas d'entête dans ton format de fichier ?

  3. #3
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 42
    Par défaut
    Ok j'ai un peu revu ma copie j'utilise fstream.get(char) mais ca ne me permet pas de lire les valeur des pixels je ne fait que lire les caractere bizarre ((¾«¸¾¼*«¶ÀÀÀµ²´)

    pour ce qui est de l'entete il est lu, celui étant sembe t'il ecrit en chanes de caractere classique:
    P5
    512 512
    255
    .....

    Mais ce que je n'arrive pas a comprendre c'est comment lire les octets ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Exactement comme là tu fais.
    Ce que tu fais de pas bon c'est l'affichage.

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est plus du C que du C++, ça ! des printf, des FILE*, tout ça, c'est du C. Donc si tu veux écrire un programme en C, tu poses la question dans le forum C, sinon tu viens ici avec un code écrit avec au moins iostream !

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    http://www.wotsit.org/download.asp?f=pgm
    Si un PGM commence par P5, ses pixels sont directement des octets.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. ouvrir image pgm ascii
    Par PunkFloyd91 dans le forum Général Python
    Réponses: 6
    Dernier message: 06/05/2011, 17h48
  2. Ouvrir image.fig sans matlab
    Par niacinside dans le forum MATLAB
    Réponses: 1
    Dernier message: 23/03/2009, 06h56
  3. Ouvrir image avec adresse
    Par Tintou dans le forum Word
    Réponses: 17
    Dernier message: 09/05/2007, 09h00
  4. Lire une image PGM
    Par ToTo13 dans le forum Langage
    Réponses: 7
    Dernier message: 09/10/2006, 18h39
  5. probleme : compression d'image (pgm)
    Par Micks71 dans le forum C
    Réponses: 3
    Dernier message: 05/05/2006, 12h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo