J'essaie de faire itérair une image avec seulement des pixels noirs et blancs. Pour chaque pixel noir, je veux diminuer un score, alors que pour chaque pixel blanc, je voudrais augmenter un score. Toutefois, lors du test du code suivant, je reçois cette erreur: Il a quelque chose à voir avec le L'image a été lue à l'aide de la bibliothèque OpenCV. L'image d'origine est ensuite filtrée pour une couleur spécifique, avec laquelle un masque est créé. Ce masque n'a que des pixels noirs et blancs, comme mentionné précédemment. P> img [i, j] code> instruction. Comment peut-il y avoir plusieurs pixels dans cette arie? Suis-je pas spécifiquement appeler un pixel en utilisant
img [i, j] code>? Est-ce que quelqu'un sait comment je pourrais résoudre ce problème, ou s'il existe une autre méthode de travail pour accéder à 1 pixel spécifique? P>
3 Réponses :
Cela se produit car img [i, j] = [0, 0, 0] # pour le noir p> img [i, j] = [255, 255, 255] # pour blanc p> et ces tableaux ne sont pas associés à Votre condition nécessite un img [i, j] code> donne une matrice avec les valeurs RVB
true code> ou
false code >. Vous devez modifier votre état. P>
tout () code>. P> p> p>
J'ai changé le test if-test sur si img [i, j] == [255.255.255]: code> mais toujours la même erreur
C'est un tableau, pas une liste, plus une matrice similaire ([255, 255, 255])
Hmm étrange, même avec numpy.array ([255.255.255]) code> Aucune différence
Mon mauvais, vient de réaliser que la comparaison donne une matrice, vous devez l'entourer avec tout () pour obtenir une valeur.
Cela signifie que votre tableau a 3 dimensions. Vous pouvez imprimer img [i, j] code> pour voir comment on ressemble. La valeur que vous voulez est probablement souvent à la même position, appelant
img [i, j, 0] code> ou
img [i, j, 1] code> devrait fonctionner p>
Si je change mon test if-test sur si img [i, j, 0] == [255.255.255]: code> ou
si img [i, j, j, 1] == [255.255 255]: < / Code> Cela me donne toujours la même erreur.
Ici vous allez = ^ .. ^ =
from PIL import Image # load image img = Image.open('BlackWhite.gif').convert('RGB') pixel = img.load() # calculate the score score = 0 w=img.size[0] h=img.size[1] for i in range(w): for j in range(h): if pixel[i, j] == (255, 255, 255): score += 1 elif pixel[i, j] == (0, 0, 0): score -= 1
img code> a trois dimensions, donc
img [i, j] code> n'est pas une valeur unique, mais un vecteur. Si la troisième dimension est
1 code>, vous pouvez simplement faire
img [i, j, 0] code> à la place. Cependant, dans ce cas, vous pouvez simplement faire
score = 2 * npount_nonzero (img) - img.size code>.
Tout d'abord
impression (score) code> ne fonctionnera pas, pouvez-vous également montrer quelle bibliothèque (au moins, le mieux sera la meilleure façon de définir) vous utilisez pour créer l'image
L'indentation de l'impression était fausse, je l'ai réparée. Pour créer l'image, j'ai utilisé OpenCV. Je vais mettre à jour la question.
Le nom de la variable et de la fonction sont les mêmes .. pas une bonne idée!
Il existe une API OpenCV pour interroger le format d'image, le nombre de canaux, la profondeur ECC. Veuillez faire cela et, après, mettre à jour votre question, les réponses suivantes n'ont aucun sens si vous ne spécifiez pas les détails de l'image.