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

GTK+ avec C & C++ Discussion :

Parcours d'une image


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Parcours d'une image
    Bonjour,
    Je dois actuellement réaliser un petit programme de reconnaissance de forme (ouai je sais pour débuter avec GTK c'est vraiment ce qu'il y a de plus simple )
    Il faudrait donc que je parcours une image (déjà chargée) dans son intégralité pour récupérer les différentes valeurs des pixels.
    Après quelques recherche, je me suis dit que les pixmaps seraient probablement une solution. Seulement je n'arrive toujours pas à comprendre comment faire pour parcourir les images.

    Si quelqu'un avait une solution, merci !

  2. #2
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Salut,

    Tu crées un pixbuf. Depuis un fichier image, une image inline, un autre pixbuf en mémoire, ou un widget image bref ce que tu veux.

    Ensuite créer un tableau de gchar et le remplir avec gdk_pixbuf_get_pixels().

    Après récupérer le nombre de channels, et la largeur/hauteur de l'image avec gdk_pixbuf_get_width() pour pouvoir faire une boucle imbriquée. La valeur d'un pixel est obtenue avec l'équation y = ax+b dans le tableau à deux dimensions.

    Ces deux liens pointant vers la doc de gdkpixbuf contiennent au moins deux exemple de code illustrant celà:

    http://developer.gnome.org/doc/API/2...buf/index.html
    http://developer.gnome.org/arch/imaging/gdkpixbuf.html

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup !

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    attention gdk_pixbuf_get_width() ne fonctionnera pas toujours comme il faut dans le parcours d'une image.
    dans le 'buffer image' le nombre d'octets qui séparent 2 lignes est donné par la fonction gdk_pixbuf_get_rowstride().


    un GdkPixbuf peut contenir une référence sur le buffer d'un autre GdkPixbuf (une image est une portion d'une autre image) .
    Dans ce cas les 2 GdkPixbuf partagent le même buffer et le nombre d'octets qui séparent 2 lignes consécutives (rowstride) est le même pour le 2 GdkPixbufs tandis que ta taille (width) de chaque GdkPixbuf lui est propre


    ton code pourrait ressembler à quelquechose comme ça


    buffer= gdk_pixbuf_get_pixels(...);
    stride= gdk_pixbuf_get_stride(...);
    width= gdk_pixbuf_get_width(...);
    int nc= gdk_pixbuf_get ... // nombre de channel ; 3=image opaque / 4 =image avec transparence
    for (int i=0; i<height; i++)
    {
    for (int j=0; j<width; j++) { r=*buf++; v=*buff++; b=*buff++; if (nc==4) buff++; }
    buff += nc*(stride-width);
    }


    a+

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci à toi lolo.doudou pour ton message, qui m'a beaucoup aidé. Cependant je rencontre encore des problèmes


    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
    /*pSrcPixbuf est un pixbuf contenant mon image*/
    /* tImg un guchar* et img une structure */
    img.l = (int)gdk_pixbuf_get_width(pSrcPixbuf);
    img.h = (int)gdk_pixbuf_get_height(pSrcPixbuf);
    channel = gdk_pixbuf_get_n_channels(pSrcPixbuf);
    tImg = gdk_pixbuf_get_pixels(pSrcPixbuf);
    stride = gdk_pixbuf_get_rowstride(pSrcPixbuf);
     
    for (i=0; i<img.h; i++) {
    	for (j=0; j<img.l; j++) { 
    		img.tab[i][j][0]=(int)*tImg++;
    		img.tab[i][j][1]=(int)*tImg++;
    		img.tab[i][j][2]=(int)*tImg++;
    		/* j'affiche les valeurs enregistrées */
    		printf("[%d][%d] : %d - %d - %d\n",i,j,img.tab[i][j][0],img.tab[i][j][1],img.tab[i][j][2]);
    		if (channel==4)
    			tImg++;
    	}
    	tImg += channel*(stride-img.l);
    }
    Ce qui correspond bien avec le morceau de code de lolo.doudou.
    Seulement, si je traite l'image suivante au format bmp) :

    J'obtiens les valeurs suivantes (je joint le fichier en entier si ca peut aider) :
    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
    [0][0] : 254 - 254 - 252
    [0][1] : 254 - 254 - 252
    [0][2] : 254 - 254 - 252
    [0][3] : 254 - 254 - 252
    [0][4] : 254 - 254 - 252
    [...]
    [4][79] : 254 - 254 - 252
    [4][80] : 254 - 254 - 252
    [4][81] : 187 - 210 - 188
    [4][82] : 45 - 69 - 55
    [4][83] : 23 - 27 - 54
    [...]
    [139][175] : 0 - 0 - 0
    [139][176] : 8 - 78 - 14
    [139][177] : 8 - 39 - 0
    [139][178] : 0 - 0 - 0
    [139][179] : 82 - 14 - 8
    Ce qui ne correspond pas du tout à l'image. J'ai essayé avec différentes images, sur différents formats, et j'obtiens toujours quelque chose de faux.

    Je ne comprends pas du tout ce qui ne va pas et pourquoi au début les images semblent être bien décryptées alors qu'elles le sont mal à la fin....

    Merci
    Fichiers attachés Fichiers attachés

  6. #6
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tImg += channel*(stride-img.l);
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tImg += stride-(channel*img.l);

Discussions similaires

  1. parcours des éléments d'une image
    Par trondro dans le forum Images
    Réponses: 3
    Dernier message: 30/05/2013, 10h44
  2. Parcours d'une image
    Par aymenbech dans le forum Images
    Réponses: 3
    Dernier message: 16/04/2012, 19h21
  3. [Débutant] Optimisation de parcours dans une image
    Par MaximeL dans le forum Images
    Réponses: 4
    Dernier message: 22/05/2009, 09h56
  4. Parcours du contours d'une image
    Par samia_6 dans le forum Images
    Réponses: 3
    Dernier message: 10/11/2007, 18h01
  5. [c++.Net] Parcours des pixels d'une image
    Par CaptainChoc dans le forum Framework .NET
    Réponses: 4
    Dernier message: 27/11/2006, 16h05

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