Analyse image erreur 'tuple' and 'int'

Fermé
Cami1_2 Messages postés 1 Date d'inscription jeudi 31 mars 2022 Statut Membre Dernière intervention 31 mars 2022 - Modifié le 31 mars 2022 à 17:44
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 - 31 mars 2022 à 19:08
Bonjour,

Dans le cadre d'un projet je dois analyser des images avec une tache sur un fond de papier en calculant la surface de la tâche.

Pour cela j'ai commencé par définir deux fonctions :
  • moyenne()
    doit calculer la moyenne de la couleur de l'image ;
  • seuillage()
    doit mettre en noir ou blanc chaque pixel en fonction de si sa valeur est au-dessus ou en dessous de la moyenne


import PIL.Image as Image
img = Image.open('RLCT1.jpg')
taille = img.size
largeur = taille[0]
hauteur = taille[1]

def moyenne():
    s = 0
    for i in range(largeur):
        for j in range (hauteur):
            s = s + img.getpixel((i, j))
    return (s / (hauteur * largeur))

def seuillage (m):
    nouvelle = Image.new("1", (largeur, hauteur), color=0)
    for i in range (largeur):
        for j in range(hauteur):
            pixel = img.getpixel((i, j))
            if pixel < m:
                pixel = 0
            else:
                pixel = 255
            nouvelle.putpixel((i, j), pixel)
    nouvelle.save('RLCT1.jpg')


Le problème est que pour ces deux fonctions, j'obtiens des message d'erreurs :

s = s + img.getpixel((i,j))

TypeError: unsupported operand type(s) for +: 'int' and 'tuple'


... et pour seuillage avec un
m
entre
0
et
250
:

'<' not supported between instances of 'tuple' and 'int'


Est-ce que quelqu'un pourrais m'expliquer et m'aider ?
Merci
A voir également:

4 réponses

yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 Ambassadeur 1 538
31 mars 2022 à 14:11
bonjour,
peux-tu, quand tu partages du code, utiliser les balises de code? https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

As-tu examiné ce que tu obtenais de getpixel()?
0
mamiemando Messages postés 33284 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 septembre 2024 7 787
31 mars 2022 à 17:49
Bonjour,

Pour compléter ce que dit yg_be,
getpixel
retourne un tuple comme le montre ton message d'erreur, or tu ne peux pas additionner un entier et un tuple (vraisemblablement les valeurs
(red, green, blue)
du pixel choisi), d'où ton premier message d'erreur. Le second est d'ailleurs la même erreur, car tu compares un entier et un tuple.

Je t'invite à regarder cet exemple.

Bonne chance
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 Ambassadeur 1 538
31 mars 2022 à 18:29
Je pense que ton code est écrit pour une image en nuances de gris.
Tu dois légèrement l'adapter pour une image en couleur.
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538
31 mars 2022 à 18:49
Pour une image en couleur, tu dois aussi décider comment "trier" les couleurs.
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 Ambassadeur 1 538
31 mars 2022 à 19:08
Il suffit peut-être d'ajouter
[0]
ainsi:
img.getpixel((i,j))[0]
0