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 :

Ouverture image jpg avec ifstream


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur à ses heures perdues
    Inscrit en
    Août 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur à ses heures perdues

    Informations forums :
    Inscription : Août 2011
    Messages : 36
    Points : 27
    Points
    27
    Par défaut Ouverture image jpg avec ifstream
    Bonjour à tous,

    Je me heurte à un problème d'ouverture de fichier jpg sans avoir pu trouver une réponse sur la faq ni sur la toile, j'ai pourtant respecté les conseils donnés mais en vain. J'ai crée une classe Frame qui contiendra les données relatives à une image . Comme je suis encore débutant il y a surement des maladresses dans la rédaction du 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
    #ifndef _Frame_h_          
    #define _Frame_h_
     
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
     
    using namespace std;
     
    class Frame {
    public:
     
    	// Constructor
    	Frame();
    	Frame(string filename,int lignes, int colonnes);
     
    	// Destructor
    	~Frame() { }
     
    	// Getter
    	const float get_pixel(int i) const;
     
     
    private:
    	// Attributs
    	string namefile;
    	vector<float> frame;
    	int nb_lignes;
    	int nb_colonnes;
     
    	//Load image
    	void load_image(const string& filename, int lignes, int colonnes);
     
     
    };
     
    #endif
    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
    #include "Frame.h"
     
    Frame::Frame()
    	: namefile(), frame(), nb_lignes(0), nb_colonnes(0) { }
     
    Frame::Frame(string filename,int lignes, int colonnes)
    	: namefile(filename), nb_lignes(lignes), nb_colonnes(colonnes)
    {
    	load_image(namefile,nb_lignes,nb_colonnes);
    }
     
    void Frame::load_image(const string& filename, int lignes, int colonnes)
    {
    	ifstream is;
    	int length=lignes*colonnes;
    	is.open(filename,ios::binary|ios_base::in);
    	unsigned char *image = new unsigned char[length];
    	is.read((char*)image,length);
     
    	for (int i=0;i<length;i++){
    		frame.push_back((float)image[i]);
    		if (i<10)
    			cout <<(float)image[i] << endl;
    	}
    	delete[] image;
    	is.close();
     
    }
     
    //Getter
     
    const float Frame::get_pixel(int i) const{
    	return frame[i];
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include "Frame.h"
     
    const int nombre_ligne=512;
    const int nombre_col=512;
     
    int main(){
    	string file_name="Lena.jpg";
     
    	Frame temp(file_name,nombre_ligne,nombre_col);
     
    	for (int i=0;i<1000;i++)
    		cout << temp.get_pixel(10000+i) << endl;
    }
    L'image est bien chargé, cependant la valeur de chaque niveau de gris est constante sur tout le vecteur et vaut 205. Quelqu'un pourrait-il m'éclairer là dessus ? L'image en question est celle-ci : http://digital.cs.usu.edu/~mjiang/cs...g2008/Lena.jpg

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur à ses heures perdues
    Inscrit en
    Août 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur à ses heures perdues

    Informations forums :
    Inscription : Août 2011
    Messages : 36
    Points : 27
    Points
    27
    Par défaut
    Par inadvertance, j'ai oublié de rajouter le fichier Lena.jpg dans le répertoire courant. L'image est bien lue avec différentes valeurs de niveaux de gris, en revanche, ceux-ci ne correspondent pas à l'image (je vérifie les valeurs avec Matlab).

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur à ses heures perdues
    Inscrit en
    Août 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur à ses heures perdues

    Informations forums :
    Inscription : Août 2011
    Messages : 36
    Points : 27
    Points
    27
    Par défaut
    Problème résolu en ayant convertit ledit fichier jpeg en format raw. En revanche, je ne sais toujours pas pourquoi mon image n'a pas été lu avec les bonnes valeurs. C'est parce qu'il y a des méta données au format jpeg ?

  4. #4
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par godskitchen Voir le message
    Problème résolu en ayant convertit ledit fichier jpeg en format raw. En revanche, je ne sais toujours pas pourquoi mon image n'a pas été lu avec les bonnes valeurs. C'est parce qu'il y a des méta données au format jpeg ?
    le format jpeg est un format compréssé, on obtiens pas directement les info.
    un complément d'info ici
    http://fr.wikipedia.org/wiki/JPEG

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Imagick] Conversion tronquée d'un PDF en image (JPG) avec la commande convert.
    Par Kikkoman dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 09/11/2012, 15h51
  2. lire une image JPG avec imread
    Par wahidred dans le forum Images
    Réponses: 7
    Dernier message: 20/10/2011, 10h07
  3. Réponses: 1
    Dernier message: 26/01/2008, 17h44
  4. Sauvegarder une image (.GIF/.JPG) avec CppWebBrowser
    Par Argol_Medusa dans le forum C++Builder
    Réponses: 12
    Dernier message: 12/12/2005, 11h27
  5. Charger et afficher une image jpg avec les mfc
    Par glop - pas glop dans le forum MFC
    Réponses: 3
    Dernier message: 11/02/2004, 18h59

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