2012-04-02 6 views
2

Ich möchte zwei Bilder (Bild A und Bild B - beide gleich groß) in Up und Down Halfs (A-Up, A-Down, B-Up, B-Down), und dann neue Bilder erstellen: A-up + B-Down und umgekehrt (was bedeutet: Ich möchte ein neues Bild haben, dessen obere Hälfte tatsächlich die obere von A und die untere Hälfte von B ist). Ich schrieb die nächste Funktion in Python, PIL-Modul:Paste Teile des Bildes - Python, PIL-Modul

import Image 
def SplitFunction(BMP): 
     im = Image.open(BMP) 
     [x,y]=im.size 
     box1=(0,0,x,y/2) 
     box2=(0,y/2+1,x,y) 
     region1 = im.crop(box1)  
     region2 = im.crop(box2) 
     region1.show() 
     region2.show() 
     return [region1,region2] 

path1='c:/movie2frames/BMPs1/stim/1.BMP' 
path2='c:/movie2frames/BMPs1/stim/334.BMP' 

[r1a,r2a]=SplitFunction(path1) 
[r1b,r2b]=SplitFunction(path2) 
#end program 

Ich weiß nicht, wie die neuen Teile einzufügen. Jede Hilfe wäre sehr geschätzt.

Antwort

1

Dies ist eigentlich viel einfacher, wenn Sie das ursprüngliche Bild in voller Größe behalten und eine neue obere Hälfte einfügen.

box_top = (0, 0, x, y/2) 
top_part = im1.crop(box_top) 
result = im2.copy() 
result.paste(top_part, box_top) 
+0

danke. Ich verstehe die Logik (und es ist natürlich viel einfacher), aber aus irgendeinem Grund bekomme ich einen Fehler beim Einfügen Befehl, dass die Bilder nicht übereinstimmen [obwohl sie ursprünglich die gleiche Größe haben]. natürlich habe ich im2.open (...) hinzugefügt. irgendwelche Ideen? – user552231

+0

@ user552231, stellen Sie sicher, dass sie den gleichen Modus sind. Verwenden Sie die 'convert'-Funktion, um bei Bedarf in den' RGB'-Modus zu konvertieren. –

+0

danke. aber das scheint nicht das Problem zu sein. Ich denke, ich bin alleine mit diesem Fehler .. Ich bin die neue Funktion beifügen [aber ich denke, es ist nicht wirklich lesbar: Import Image def SplitFunction (BMP1, BMP2): im1 = Bild.open (BMP1) im2 = Image.open (BMP2) [x, y] = im1.size box_top = (0, 0, x, y/2) = top_part im1.crop (box_top) result = im2.copy() Ergebnis .paste (IM1, box_top) return result path1 = 'c: /movie2frames/BMPs1/stim/1.BMP' path2 = 'c: /movie2frames/BMPs1/stim/334.BMP' SplitFunction (path1 , path2) – user552231

1

Sie haben ein neues Bild von der Größe der beiden Teile zu erstellen:

im = Image.new(mode, size) 

dann die getrennten Bilder einfügen:

im.paste(image, box) 

Für weitere Details siehe Dokumentation: http://effbot.org/imagingbook/image.htm