So habe ich zwei PIL Bilder von RGBA. Was ich tun möchte, ist es, alle Orte zu finden, wo die RGB-Werte gleich sind und Alpha ist 255. Es sieht wie folgt aus:Numpy mit wo mit verschiedenen Array-Größen
from PIL import Image
import numpy as np
img1 = np.array(Image.open(/path/to/img1).convert('RGBA'), float).reshape(32,32,4)
img2 = np.array(Image.open(/path/to/img2).convert('RGBA'), float).reshape(32,32,4)
# Checks to see if RGB of img1 == RGB of img2 in all locations that A=255
np.where((img1[:,:,:-1] == img2[:,:,:-1]) &\ # RGB check
(img1[:,:,3] == 255)) # Alpha check
Aber dies führt zu operands could not be broadcast together with shapes (32,32,3) (32,32)
.
Ich dachte nicht, dass ich versuchte, sie zusammen zu übertragen, ich wollte nur die Indices finden, die ich wiederum in dieser Aussage ausstrahlt. Gibt es eine andere Möglichkeit, dies zu tun, oder eine Möglichkeit, ungleiche Formen nicht zu übertragen?
'img1 [:,:,: -1]' Ergebnisse in Form einer Anordnung von '32, 32, 3'. 'img1 [:,:, 3]' ergibt ein Array mit der Form '32, 32'. – mgilson
@mgilson ja ich weiß. Aber ist das, was ich versuche zu erreichen, klar? Ich dachte das obige würde funktionieren, weil ich dachte "np.where" würde mehrere "where" Anweisungen erlauben, nicht zusammen übertragen – ZWiki
Und um auf etwas Stil hinzuweisen, ist die '\' for line Fortsetzung hier unnötig. Python verkettet Zeilen, die sich in nicht geschlossenen Klammern, Klammern oder Klammern befinden (wie es hier der Fall ist). In der Tat empfiehlt PEP 8 (der "offizielle" Styleguide), Klammern zu verwenden, um Zeilen fortzusetzen und _never_ die '\' für Zeilenfortsetzung zu verwenden. – mgilson