Forum EduPython

Echanges autour d'EduPython.

Vous n'êtes pas identifié(e).

#1 2018-01-20 21:09:18

glamarsn
Membre
Inscription : 2018-01-20
Messages : 4

Traitement d'image

Bonjour,
je découvre Python en tant qu'enseignant et j'ai en particulier découvert la bibliothèque PIL qui permet très simplement de traiter des images pixel par pixel. On peut générer une double boucle imbriquée pour agir sur chaque pixel sans difficulté technique pour les élèves. On ouvre une image résidant à une adresse donnée, on relève chaque pixel, on restitue l'image après traitement de la couleur en niveau de gris de chaque pixel.

Mon programme fonctionne très bien sur mon PC portable bien que l'application se termine sur un message :
    File "C:\EduPython\App\Lib\rpyc.zip\rpyc\core\netref.py", line 196, in __call__
    File "C:\EduPython\App\Lib\rpyc.zip\rpyc\core\netref.py", line 71, in syncreq
    File "C:\EduPython\App\Lib\rpyc.zip\rpyc\core\protocol.py", line 434, in sync_request
   AttributeError: 'str' object has no attribute 'point'

par contre, sur le réseau du lycée, le programme a fonctionné une fois avec un groupe puis il s'est mis à tourner sans interruption possible sur les PC élèves.
J'avais constaté un problème avec la visionneuse Windows aussi ai-je fait mettre Paint comme appli par défaut mais le problème perdure.
Je présume que le problème vient du message d'erreur reçu.
Merci de votre aide si vous avez une idée de la solution.

Hors ligne

#2 2018-01-20 21:13:24

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 308

Re : Traitement d'image

Bonsoir,

     Pouvez-vous copier/coller ou joindre le code (et éventuellement l'image en question).

Merci,
VM

Hors ligne

#3 2018-01-21 07:14:16

glamarsn
Membre
Inscription : 2018-01-20
Messages : 4

Re : Traitement d'image

Bonjour,
Voici le code :

from lycee import *
         from PIL.Image import *

         def traitement(i):
         (l, h) = i.size
         for y in range(h):
               for x in range(l):
                    c = Image.getpixel(i, (x, y))
                    inv = 255 - c
                    Image.putpixel(i, (x, y), inv)

         i=open("nb.png")
         Image.show(i)

traitement(i)
Image.show(i)  

Par contre je ne vois pas comment joindre un fichier pour vous associer mon image.
Merci.
GL

Hors ligne

#4 2018-01-21 07:23:22

glamarsn
Membre
Inscription : 2018-01-20
Messages : 4

Re : Traitement d'image

J'ai mal exploité le code donc l'indentation n'est pas correcte, voici la bonne :

from lycee import *
from PIL.Image import *

def traitement(i):
    (l, h) = i.size
    for y in range(h):
        for x in range(l):
            c = Image.getpixel(i, (x, y))
            inv = 255 - c
            Image.putpixel(i, (x, y), inv)

i=open("nb.png")
Image.show(i)

traitement(i)
Image.show(i)

Hors ligne

#5 2018-01-21 09:01:48

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 308

Re : Traitement d'image

Bonjour, je ne sais pas si c'est à cause de cela, mais il y a un soucis à l'importation :
-> Soit vous importez :

from PIL.Image import *

Dans ce cas les fonctions comme show, putpixel, ... ne sont pas précédées de Image

-> Soit vous importez :

from PIL import Image

et dans ce cas, il faut précéder de Image les noms des fonctions. Cela permet du coup de différencier la fonction open de Python et celle d'Image.

Voici ce que ça pourrait donner (en utilisant les méthodes sur l'objet i) :

from lycee import *
from PIL import Image

def traitement(i):
    (l, h) = i.size
    for y in range(h):
        for x in range(l):
            c = i.getpixel((x, y))
            inv = 255 - c
            i.putpixel( (x, y), inv)

i=Image.open("nb.png")
i.show()

traitement(i)
i.show()

En effet, le show selon les versions de windows a un fonctionnement plus ou moins aléatoire. Avec mes étudiants, je leur fait enregistrer l'image pour la voir ensuite.

En espérant que cela règle le problème
VM

Hors ligne

#6 2018-01-21 16:13:02

glamarsn
Membre
Inscription : 2018-01-20
Messages : 4

Re : Traitement d'image

En effet je n'ai plus le message d'erreur. Voilà une subtilité de Python que je dois encore travailler.
Je testerai demain au lycée.
Merci beaucoup.
GL

Hors ligne

#7 2021-03-05 11:04:53

Ionique
Membre
Inscription : 2021-03-05
Messages : 1

Re : Traitement d'image

Bonjour,
Je poste ma question ici car c'est également une question sur la programmation à partir d'une image. J'ai un message d'erreur avec ce programme :

from lycee import *
from PIL import Image

img = Image.open("pomme.jpg")
r,v,b=img.getpixel((100,250))
print("canal rouge : ",r,"canal vert : ",v,"canal bleu : ",b)

Voilà ce que je reçois dans la console Python :
...module lycee actif....
Traceback (most recent call last):
  File "<string>", line 566, in run_nodebug
  File "C:\Users\ioniq\Dropbox\Mon PC \essai\pomme.py", line 5, in <module>
    r,v,b=img.getpixel((100,250))
  File "C:\EduPython\App\lib\site-packages\PIL\Image.py", line 1212, in getpixel
    self.load()
  File "C:\EduPython\App\lib\site-packages\PIL\ImageFile.py", line 244, in load
    raise_ioerror(err_code)
  File "C:\EduPython\App\lib\site-packages\PIL\ImageFile.py", line 59, in raise_ioerror
    raise IOError(message + " when reading image file")
OSError: broken data stream when reading image file

Qu'en pensez-vous ?
D'avance merci

Hors ligne

#8 2021-03-06 10:12:01

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 308

Re : Traitement d'image

Bonjour, on dirait que Python n'arrive pas à lire votre image.

* Est-elle enregistrée dans le même dossier que votre programme ?
* Essayez avec paint de l'enregistrer au format png plutôt.

N'hésitez pas si cela ne fonctionne pas !
VM

Hors ligne

Pied de page des forums