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 :

Pixeliser une image


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut Pixeliser une image
    Bonjour à tous,

    J'essaie de pixeliser une image en suivant l'énoncé suivant : Ecrire une méthode qui prend en paramètre un nombre entier N et qui transforme l'image de départ en formant des "agglomérats" de taille NxN. La couleur du "pavé" correspondant est déterminé par la moyenne arithmétique des couleurs présentes dans les N*N pixels.

    Je ne parviens pas à arriver au bon résultat. J'ai réussi à faire une pixellisation simple sans faire la moyenne.

    Mon image est sous forme d'une matrice[colonne][ligne] avec des pixels qui ont leurs couleurs avec les trois composantes RVB.

    Voici ma boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (int y = 0; y + N <= nombreLignes; y+= N){
            for (int x = 0; x + N <= nombreColonnes; x+= N){
                    // Récupération des composantes couleurs du pixel
           		r = matrice[x][y].getCouleurRouge();
           		v = matrice[x][y].getCouleurVert();
           		b = matrice[x][y].getCouleurBleu();
     
    		for (int k = y; k < y + N; k++){
    			for (int l = x; l < x + N; l++){
    				matrice[l][k] =  Pixel(r, v, b, l, k);
    			}
    		}
    	}
    }
    Si vous avez une idée n'hésité pas.

    Merci de votre aide

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    // Récupération des composantes couleurs du pixel
           		r = matrice[x][y].getCouleurRouge();
           		v = matrice[x][y].getCouleurVert();
           		b = matrice[x][y].getCouleurBleu();
    Cela ressemble plus à du C++ que du C...

    Sinon, à la place de prendre la première couleur, écrit une fonction qui te rend une moyenne du bloc...

    Jc

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    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
    for (int y = 0; y < nombreLignes; y+= N){
            for (int x = 0; x < nombreColonnes; x+= N){
     
                    // Récupération des composantes couleurs du pixel
     	        r = 0 ;
                    v = 0 ;
                    b = 0 ;
    		for (int k = y; k < y + N; k++){
    			for (int l = x; l < x + N; l++){
            	     r = r + matrice[l][k].getCouleurRouge();
           		     v = v + matrice[l][k].getCouleurVert();
           		     b = b + matrice[l][k].getCouleurBleu();
    	          }
                    }
     
                    r = r / (N*N) ;
                    v = v/ (N*N) ;
                    b = b / (N*N) ;
     
    	        for (int k = y; k < y + N; k++){
    	          for (int l = x; l < x + N; l++){
    			matrice[l][k] =  Pixel(r, v, b, l, k);
    	          }
    	        }
     	}
    }

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Il faudrait tester pour être sûr de ne pas sortir de la matrice...

    Jc

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Merci fearyourself et souviron34 de vos réponses.

    Je vais tester et je vous dit si ça marche.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par fearyourself
    Il faudrait tester pour être sûr de ne pas sortir de la matrice...

    Jc
    Absolument... .J'allais au plus vite...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Je viens de tester le programme et j'obtiens exactement la même chose que si je ne fais pas les moyennes. L'image est pixellisée avec des pavés de N*N de la couleur du premier pixel sans moyenne.

    J'avais déjà fait une boucle similaire qui me donnait le même résultat et je n'ai pas réussi à trouver d'où venait le problème.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Non, désolé je me suis trompé en fin de compte ça marche. J'ai à nouveau testé et je viens de me rendre compte que j'avais fait une erreur d'indice.

    Ca m'apprendra la prochaine fois je vérifierais mieux avant de poster que ça ne marche pas.

    Merci beaucoup fearyourself.

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

Discussions similaires

  1. Pixelisation d'image lors d'une rotation
    Par univscien dans le forum 2D
    Réponses: 19
    Dernier message: 08/11/2009, 16h08
  2. Resize d'une image
    Par Anonymous dans le forum C
    Réponses: 6
    Dernier message: 13/07/2008, 22h23
  3. Réponses: 3
    Dernier message: 12/06/2002, 19h03
  4. lire une image au format RAW
    Par Anonymous dans le forum OpenGL
    Réponses: 5
    Dernier message: 20/05/2002, 00h11
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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