Besoin d'aide pour petit programme

Bonjour,

Tout d'abord, je débute a python donc je ne cherche pas a coder un truc compliqué :)

J'aimerai comprendre comment coder un programme permettant de flouter une image, par exemple assembler un carré de 10x10 pixels, faire la moyenne des couleurs avec les code RVB pour qu'au final un carré ressorte avec la nouvelle couleur

Merci d'avance :)



--
Exactement ce dont a quoi je n'aurai jamais pensé.

5 réponses

  1. Imaginons une liste de pixels

    à l'interpréteur vite fait

    >>> liste = [[167, 133, 44], [180, 146, 72], [180, 145, 91], [201, 166, 102]]
    >>> Rmoy = Gmoy = Bmoy = 0
    >>> for pixel in liste:
    ... R, G, B = pixel
    ... Rmoy += R
    ... Gmoy += G
    ... Bmoy += B
    ...
    >>> print(Rmoy, Gmoy, Bmoy)
    728 590 309
    >>> Rmoy /= len(liste)
    >>> Rmoy
    182.0
    >>> Gmoy /= len(liste)
    >>> Gmoy
    147.5
    2
    1. Je comprend pas comment ca marche, je vais faire une autre methode au final...

      Je vais juste prendre le pixel central d'une zone et le faire remplacer tout ceux autour, ce sera plus simple

      merci quand mee de l'aide :)
      0
  2. Bon je reviens, j'ai pas le droit d'utiliser PIL

    J'ai le debut mais apres je ne sais pas comment selectionner x et y dans la matrice, pour pouvoir modifier la lsite avec a[:10] si je veux un carré de 10×10 pixels

    J'ai ca pour le debut seulement

    from netpbm import *
    nomFichier = "joconde_P3.ppm"
    tab, entete =lect_image(nomFichier)
    print(entete)
    afficher_tableau(tab)

    (oui j'essaie sur une image de la joconde ^^)
    0
    1. "J'ai le debut mais apres je ne sais pas comment selectionner x et y dans la matrice, pour pouvoir modifier la lsite avec a[:10] si je veux un carré de 10×10 pixels"

      On peut avoir un exemple, c'est pas très clair...

      Si vous donnez un exemple de matrice, et la sortie attendue, je pense qu'on y arrivera.
      0
      1. La j'ai une liste des pixels de couleur -- > [167, 133, 44], [180, 146, 72], [180, 145, 91], [201, 166, 102]etc etc

        c'est une liste, donc deja comment je fais pour que ce soir comme un "tableau" ?

        Et je voudrais pouvoir demander a l'utilisateur de choisir un valeur qui determinera la taille du cote des pixels a flouter

        par exemple pour 10 le programme prendra un carré (en partant de en haut a gauche) de 10 pixels par 10 pixels, en ensuite il devra faire la moyenne de tous les R, de tous les G et de tous les B pour remplir ces 100pixels par une seule et meme couleur, celle de la moyenne qu'on vient de faire
        0
    2. Nouveau programme, meme objectif

      from netpbm import *
      nom= "joconde_P3.ppm"
      tab, entete =lect_image(nom)
      Pix=int(input("entrez le nombre pour la pixelisation : "))
      NbsX=entete[1]
      NbsY=entete[2]
      tab_final=creer_matrice(NbsY,NbsX,[255, 255, 255])
      NbX=int(entete[1])
      NbY=int(entete[2])
      RepY= NbY // Pix
      RepX= NbX // Pix
      #le but est de savoir combien de carreau peut rentrer dans l'image
      d=Pix
      i=Pix

      VarY=0
      a=0

      g=1
      c=1

      PfX=Pix
      PiX=0

      PfY=Pix
      PiY=0

      VarY2=VarY
      aa=a
      while(g<=RepX):
      while(c<=RepY):
      #la boucle est la pour repeter l'action jusqu'au nombre de fois que l'on peut
      #mettre des carreaux, d'une part dans la hauteur, de l'autre dans la largeur.
      for NbsY in range(VarY,i) :
      for NbsX in range(a,d):
      # Si n est impair
      if (((Pix+1) % 2) == 0) :
      t=int(i-(Pix/2))
      k=int(d-(Pix/2))
      f=tab[t][k]
      # Si n est pair
      elif (Pix % 2 ) == 0 :
      t=int(i-(Pix/2)+1)
      k=int(d-(Pix/2)+1)
      f=tab[k][t]
      #f représente le pixel qui est au mileu du carreau, il varie celon et t et k qui
      #########eux memes varient celon l'axe X et Y
      while PiX <= PfX:
      while PiY <=PfY:
      #ces boucles sont la pour faire en sorte que les carreaux changes un a un
      #afin quelle soit remplacer par la case f
      tab_final[VarY2][aa]=f
      PiY=PiY+1
      VarY2=VarY2+1
      PiX=PiX+1
      aa=aa+1
      #ici on cherche a remplacer tout les pixel du carreau par le pixel f c'est a dire
      #celui du mileu
      a=a+Pix
      d=Pix+Pix
      c=c+1
      w=range(a,d)
      #on ajuste les variables pour que celles ci ce situe maintenant un carreau plus loin
      #et que l'operation se repete
      g=g+1
      VarY=VarY+Pix
      i=i+Pix
      a=1
      d=Pix
      c=1
      y=range(VarY,i)
      #de meme on descend d'un carreau et on repete l'opération qui constiste et modifier
      #toute la ligne
      fic=nom+"_mosaique"
      fichier_image_P3(tab_final,fic,255)

      Il*y a un probleme pour remplacer les pixels, ca fait que la premiere colonne, je ne sais pas commetn faire pour que ca passe sur la deuxieme colonne

      Des astuces svp ? (ca commence la ou il y a plein de ###)
      0