Parcourir la source

init

First push
Harupi il y a 8 mois
commit
39e5ceddc6
3 fichiers modifiés avec 176 ajouts et 0 suppressions
  1. 45 0
      .gitignore
  2. BIN
      images/hibou.jpg
  3. 131 0
      main.py

+ 45 - 0
.gitignore

@@ -0,0 +1,45 @@
+# Created by codeshack.io
+
+### Linux ###
+*~
+.fuse_hidden*
+.directory
+.Trash-*
+.nfs*
+
+### VS Code ###
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+*.code-workspace
+
+### Python ###
+__pycache__/
+*.py[cod]
+*$py.class
+*.so
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/

BIN
images/hibou.jpg


+ 131 - 0
main.py

@@ -0,0 +1,131 @@
+from PIL import Image
+from numpy import asarray, ndarray, array, uint8, delete
+
+# image = Image.open("images/hibou.jpg")
+
+# image = image.convert("L")
+
+# img_array = asarray(image)
+
+# print(len(img_array[0])//3)
+
+
+### Fonctions ###
+
+def import_image(chemin: str) -> ndarray :
+    """Charge l'image donnée, la passe en nuances de gris, et la convertie en tableau (de numpy)"""
+
+    ## Chargement de l'image ## 
+
+    # On essaie d'ouvrir l'image avec la librairie PIL
+    try:
+        image = Image.open(chemin)
+
+    # Gestion d'erreur si le fichier n'est pas accessible ou n'existe pas 
+    except FileNotFoundError:
+        print("Le chemin d'accès est invalide.")
+        # TODO Set image sur une image blanche en cas d'erreur
+    
+    # Gestion d'erreur dans les autres cas
+    except:
+        print("Une erreur s'est produite")
+        # TODO Pareil qu'au dessus
+
+
+    ## Conversion de l'image en nuances de gris ##
+
+    # On utilise la méthode .convert() de PIL
+    image = image.convert("L")
+
+
+    ## Conversion en tableau ##
+
+    # On utilise la fonction asarrray() de numpy
+    image_array = asarray(image)
+
+    return image_array
+    
+    
+def tab_image_blanche(longueur: int, hauteur: int) -> ndarray:
+    """Génère un tableau contenant des pixels blancs avec les dimensions données"""
+    # On crée autant de lignes que de pixels de hauteur, et autant de pixels que de hauteur
+    tab = [ [255] * longueur] * hauteur
+    return array(tab)
+
+
+def get_longueur_img(tab_img: ndarray) -> int:
+    """Renvoie la longueur du tableau à deux dimensions (représentant une image) donné"""
+    return len(tab_img[0])
+
+def get_hauteur_img(tab_img: ndarray) -> int:
+    """Renvoie la hauteur du tableau à deux dimensions (représentant une image) donné"""
+    return len(tab_img)
+
+def assombrir_pixel(tab_img: ndarray, ligne: int, colonne: int) -> ndarray:
+    """Réduit de 51 (parce que c'est 255/5) les valeurs des couleurs du pixel à la position donnée."""
+    if tab_img[ligne][colonne] >= 51:
+        tab_img[ligne][colonne] = tab_img[ligne][colonne] - 51
+
+    return tab_img
+
+def generer_clous(tab_img: ndarray) -> list:
+    """Génère un tableau qui contient des tuples qui représentent des clous : deux coordonnées et un numéro de côté -> 0 pour le haut, 1 pour la droite, 2 pour le bas, 3 pour la gauche"""
+    liste_res = []
+
+    h = get_hauteur_img(tab_img)
+    l = get_longueur_img(tab_img)
+
+    for i in range(0, l, 10):
+        liste_res = liste_res + [(0, i, 0)]
+    for i in range(10, h, 10):
+        liste_res = liste_res + [(i, l - 1, 1)]
+    for i in range(0, l - 10, 10):
+        liste_res = liste_res + [(h - 1, i, 2)]
+    for i in range(10, h - 10, 10):
+        liste_res = liste_res + [(i, 0, 3)]
+
+    return liste_res
+
+def visible(clou1: tuple, clou2: tuple) -> bool:
+    """Renvoie True si les clous se voient, False sinon"""
+    return clou1[2] != clou2[2]
+
+
+image = import_image("images/hibou.jpg")
+print(image)
+
+image_blanche = tab_image_blanche(get_longueur_img(image), get_hauteur_img(image))
+
+print(image_blanche)
+
+img = Image.fromarray(uint8(image_blanche))
+
+for i in range(0, 50):
+    for j in range(0, 50):
+            image_blanche = assombrir_pixel(image_blanche, i, j)
+
+img = Image.fromarray(uint8(image_blanche))
+#img.show()
+
+print(image_blanche)
+
+clous = generer_clous(image_blanche)
+print(clous)
+
+test = tab_image_blanche(111, 111)
+c = generer_clous(test)
+for i in range(0, len(c)):
+    test = assombrir_pixel(test, c[i][0], c[i][1])
+im_test = Image.fromarray(uint8(test))
+im_test.show()
+
+
+### TODO ###
+
+# On peut essayer de regarder des clous aléatoire plutôt que de tout tester
+
+# On regarde l'erreur sur la ligne qu'on vient de tracer, en faisant des moyennes par zones
+
+# Pas forcément la même résolution pour le calcul que pour l'image
+
+# Pas forcément mesurer l'erreur d'une bande de quelques pixels au bord si on met les clous dedans