Ich habe zwei 3D-numpy Arrays, die jeweils ein Bild (x, y, rgb) darstellen. Ich möchte das kleinere Bild in das größere Bild schreiben, mit Ausnahme von Magenta-Pixeln (255, 0, 255). Ich weiß, wie man eine 2D-Maske erzeugt, die alle Magenta-Pixel darstellt - wie kann ich diese 2D-Maske in einer 3D-Array-Operation verwenden?Ein numply 3D-Array in ein Stück eines größeren 3D-Arrays mit einer 2D-Maske schreiben
0
A
Antwort
2
Hier ist ein Beispiel. Es ist nicht genau genau (alle Werte sind eins oder zwei), aber gibt die Idee. Hoffentlich funktioniert das in Ihrer Situation:
image1 = np.ones((5,5,16))
image2 = 2 * np.ones((3,3,16))
mask = np.array([[0, 1, 1], [0, 0, 1], [1, 0, 0]])
x, y = np.where(mask)
image1[1:4,1:4,:][x,y,:] = image2[x,y,:]
(. 1:4,1:4
ist die Position des Unter-Bildes im Innern des größeren Bildes)
Für diejenigen, die versuchen diese in numpypy zu verwenden, wird es nicht funktionieren - offenbar [1 -arg, wo noch nicht implementiert ist.] (https://bitbucket.org/pypy/numpy/issues/41/implementation-of-1-arg-numpywhere) Gibt es eine andere Methode, die Pypy besser unterstützen kann? –