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

Python Discussion :

Transformé une image 100x100 pixels noirs et blancs en une matrice de 1 et 0


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 2
    Par défaut Transformé une image 100x100 pixels noirs et blancs en une matrice de 1 et 0
    Bonsoir,
    Je viens de commencer à utiliser Python pour un stage de fin d'étude
    Je dois créer un programme qui transformerai une image de 100 par 100 pixels noirs et blancs (pas de nuances de gris) en une matrice simple de 1 et de 0.
    J'ai réussi à transformé les images en matrices mais les termes sont de cette forme [1. 1. 1], que dois-je faire pour transformer cela en un simple 1?
    Nom : programme.png
Affichages : 1461
Taille : 9,2 KoNom : matrice.png
Affichages : 957
Taille : 4,6 Ko

  2. #2
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    dans la doc il est dit "It's a 24-bit RGB PNG image (8 bits for each of R, G, B)", dans votre cas il est clair que c'est plus simple, pas de couleur ni mélange, c'est soit blanc soit noir.
    vous pouvez utiliser numpy.average qui fait la moyenne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> a = numpy.array([
    	[1, 6, 3],
    	[1, 5, 8],
    ])
    >>> numpy.average(a, axis=1)
    array([3.33333333, 4.66666667])
    si vous avez toute confiance dans votre image et ne pas faire de vérification (par simple acquis de conscience je vérifiais à un moment où un autre que j'ai bien que des 0 et 1) sur les données en sortie plutôt que de faire une moyenne vous pouvez pendre la première colonne, vous grappillerez un peu de perf mais rien de radical.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> a = numpy.array([
    	[1, 6, 3],
    	[1, 5, 8],
    ])
    >>> a[:,0]
    array([1, 1])
    Par curiosité sur quelle type d'application travaillez vous ? j'ai du mal à voir dans quel cas ça a une application (Qr code / code barre peut être ?)

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 2
    Par défaut
    J'ai beau essayé avec numpy.average ça ne change rien et pour a[:,0] ça me donne encore une matrice RGB mais de 100 lignes et 1 colonnes...
    C'est dans la recherche photonique le but c'est quand il y a un 1, il y est un impact de laser sur un échantillon test

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 698
    Par défaut
    Salut,

    Rien ne vous empêche de créer une matrice 100 x 100 remplie de 0 ou de 1 (np.ones ou np.zeros), puis de la finaliser en parcourant le tableau initial avec une double boucle.

    Après vous pouvez chercher à "optimisez" (i.e. faire faire ce boulot par une fonction écrite en C) et passer du temps pour apprendre à utiliser PIL, numpy ou OpenCV qui permettent toutes de faire ce travail là "à leur sauce".

    On peut aussi réfléchir aux spécificités du problème.
    Si tous les pixels sont [0, 0, 0] ou [1, 1, 1] transformer [0, 0, 0] et 0 et [1, 1, 1] en 1 c'est juste extraire une des couleurs.
    Ce qui peut se faire avec array[:,:,1] (1 = la couleur du milieu).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    Citation Envoyé par Nicolarménien Voir le message
    J'ai beau essayé avec numpy.average ça ne change rien et pour a[:,0] ça me donne encore une matrice RGB mais de 100 lignes et 1 colonnes...
    C'est dans la recherche photonique le but c'est quand il y a un 1, il y est un impact de laser sur un échantillon test
    pouvez vous monter le code avec average ainsi que le résultat attendu ?
    j'avais compris que vous aviez un array à 2 dimensions et que vous vouliez le réduire à une

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Salut,

    Avec Pillow c'est pratiquement instantané avec une si petite image.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from PIL import Image
     
    mat = [[0] * 100 for _ in range(100)]
    image = Image.open(filename)
    for y in range(100):
        for x in range(100):
            p = image.getpixel((y, x))[0]
            mat[y][x] = p and 1
    Testé avec une png en gamme de gris, je n'ai pas de pure noir et blanc, mais ça ne change rien.

Discussions similaires

  1. Convertir une image couleur en noir et blanc avec partie en couleur
    Par capmalo dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 16/10/2014, 02h38
  2. convertir une image couleur en noir et blanc en java
    Par hadjila20 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 02/11/2012, 03h32
  3. Rendre une image couleur en noir et blanc en utilisant AForge
    Par angifilmes dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/01/2011, 10h45
  4. Réponses: 7
    Dernier message: 08/02/2010, 22h02
  5. Transformation image couleur en noir et blanc
    Par AuraHxC dans le forum Qt
    Réponses: 13
    Dernier message: 20/10/2009, 22h33

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