Seite 1 von 1

Bilder Rotieren

Verfasst: Dienstag 8. Juli 2008, 09:18
von Xisto
Hallo,

ich muß inner halb meiner Diplomarbeit ein Bild eines Objektes machen und dies dann Analysieren. Um das Objekt immer grade zu haben filtere ich einen Rahmen die linke und rechte obere ecke herraus und berechne dann den Winkel um den ich es drehen muß. Leider kann es passieren wenn das Objekt sehr lang ist das nach der Rotation teile vom Objetkt fehlen und auch die Ecken die vorher nicht da waren sind schwarz kann man dagen was tun. Am liebsetn wöre mir einfach das bild so drehen wie es ist leider kann ich das aber nur um 90,180,270 grad. Mein teil prog sieht so aus. Kann mir da einer helfen. Danke

Code: Alles auswählen

img=Image.open('c:\\diplomarbeit\\test\\test.bmp')
img = img.convert("L")

size = img.size
srcImg = img.getdata()
lnPix = size[0]

for y in range(size[1]-1,-1,-1):
     for x in range(size[0]-1,-1,-1):
          lnPix -= 1
          f = srcImg[lnPix]
          if f == 0:
               obenx = x
               obeny = y+1

for x in range(size[0]-1,-1,-1):
     for y in range(size[1]-1,-1,-1):
          f = img.getpixel((x,y))
          if f == 0:
               untenx = x
               unteny = y

t =  math.degrees(math.acos(((obenx-untenx)/(math.sqrt(pow((obenx-untenx),2)+ pow((unteny-obeny),2))))))

img=img.rotate(-(t), resample=0)

#img = img.transpose(Image.ROTATE_90)
img=img.show()

Verfasst: Dienstag 8. Juli 2008, 09:31
von CM
Mache ein größeres Bild und paste Dein gedrehtes Bild dort hinein. Du kannst diesem größeren Bild einen beliebigen Hintergrund geben. Es kann eine minimale Größe haben, um das jeweils gedrehte Bild zu enthalten oder Du machst die größeren Bilder so groß, dass sie alle Deinen gedrehten Bilder enthalten können.

Alternativ, kannst Du die Teile, die Du auf der einen Seite rausdrehst,an der anderen Seite reindrehen. Dazu würde ich auf scipy zurückgreifen, weil Du dann Bilder wie arrays behandeln kannst. Ich würde mir die Mühe aber nur machen, wenn es sinnvoll ist und die Bilder Graustufenbilder sind (aus Faulheit ;-) ). Das Online-Tutorial von PIL enthält ein Biespiel zum Rollen von Bildern, das als ganz guter Startpunkt dienen kann.

Gruß,
Christian

Verfasst: Dienstag 8. Juli 2008, 11:30
von EyDu
Warum sollte man sich die Mühe nur mit Graustufenbildern machen? Wenn man das Bild in RGB vorliegen hat, behandelt man jeden Kanal wie ein Graustufenbild und fertig ist die Rotation eines Farbbildes.

Verfasst: Dienstag 8. Juli 2008, 12:12
von Xisto
Ich habe es mal mit paste versucht die schwazen ecken die durch die rotation entstehen sind dann leider aber immer noch da. IMG ist 800*600

Code: Alles auswählen

size=[900,700]
img2 = Image.new('L',size,255)
img=img2.paste((img.rotate(-(t))),(0,0))

Verfasst: Dienstag 8. Juli 2008, 12:16
von veers
Das grössere Bild muss auch mindestens 1000 Pixel Breit und hoch sein um das andere in jedem Fall beinhalten zu können ;)

Verfasst: Dienstag 8. Juli 2008, 12:51
von CM
EyDu hat geschrieben:Warum sollte man sich die Mühe nur mit Graustufenbildern machen?
Na ja, eigentlich ist das nur meinem Empfinden geschuldet: Es sieht oft ziemlich schlecht aus, wenn man es mit farbigen Bildern macht und kostet Arbeit Kontrasteffekte zu kompensieren. Aber natürlich geht das. Im Grunde habe ich zu viel in die Frage hineininterpretiert.

Verfasst: Dienstag 8. Juli 2008, 14:46
von Michael Schneider
Hi Xisto,

es wird häufiger gemunkelt, dass PIL nicht gerade das Optimum für die Rotation von Bildern ist. Wie wäre es, wenn Du für die eigentliche Rotation ein Kommandozeilentool verwendest, das auf Bildbearbeitung spezialisiert ist?
Ich kann Dir heute Abend einen Link zu einem ganz guten Tool nennen.

Gruß,
Michael

Verfasst: Dienstag 8. Juli 2008, 15:04
von CM
Das Tool schlechthin: www.imagemagick.org (inkl. Pythonanbindung)

Aber imagemagick ist auch ziemlich komplex.

Verfasst: Dienstag 8. Juli 2008, 15:12
von EyDu
CM hat geschrieben:Na ja, eigentlich ist das nur meinem Empfinden geschuldet: Es sieht oft ziemlich schlecht aus, wenn man es mit farbigen Bildern macht und kostet Arbeit Kontrasteffekte zu kompensieren. Aber natürlich geht das. Im Grunde habe ich zu viel in die Frage hineininterpretiert.
Bei affinen Transformationen ist das aber alles kein Problem. Bei anderen Operationen kann man natürlich belieblig schlecht aussehende Ergebnisse erzielen^^

Verfasst: Dienstag 8. Juli 2008, 15:14
von Michael Schneider
CM hat geschrieben:Das Tool schlechthin: www.imagemagick.org (inkl. Pythonanbindung)

Aber imagemagick ist auch ziemlich komplex.
Hi CM,

ja, das war es. Nun, dieser Geheimtipp scheint sich ja schon rumgesprochen zu haben. ;-)

Michel