Bilder Rotieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Xisto
User
Beiträge: 23
Registriert: Dienstag 8. Juli 2008, 09:06

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()
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Xisto
User
Beiträge: 23
Registriert: Dienstag 8. Juli 2008, 09:06

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))
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Das grössere Bild muss auch mindestens 1000 Pixel Breit und hoch sein um das andere in jedem Fall beinhalten zu können ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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.
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Das Tool schlechthin: www.imagemagick.org (inkl. Pythonanbindung)

Aber imagemagick ist auch ziemlich komplex.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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^^
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Antworten