Frage

Haben Sie diese Frage von einem Professor, ein Physiker.

Ich bin ein Anfänger in Python-Programmierung. Ich bin kein Computer-Profi ich ein Physiker bin. Ich habe versucht, einen Code in Python für meine eigene Forschung zu schreiben, die eine wenig Bildverarbeitung beinhaltet.

Alles, was ich tun müssen, um ein Bild anzuzeigen, und dann eine Region von Interesse unter Verwendung meiner Maus auswählen und schließlich die ausgewählte Region zu beschneiden. Ich kann dies in Matlab tun, um die G Eingang () Funktion.

Ich habe versucht, PIL verwenden. Aber ich finde, dass, nachdem ich den Befehl Image.show Ausgabe (), wird das Bild angezeigt wird, aber dann das Programm stoppt dort, wenn ich Austritt aus dem Bildfenster. Gibt es eine Möglichkeit zu implementieren, was ich vorhatte. Benötige ich ein anderes Modul herunterladen? Bitte beraten.

War es hilfreich?

Lösung

Während ich mit David überein, dass Sie sollten wahrscheinlich nur GIMP oder ein anderes Bildbearbeitungsprogramm, hier ist ein Skript (wie ich es nahm eine Übung für den Leser zu sein) mit pygame das tut, was Sie wollen. Sie werden pygame sowie die PIL installieren müssen, würde Nutzung sein:

scriptname.py <input_path> <output_path>

Die tatsächliche Skript:

import pygame, sys
from PIL import Image
pygame.init()

def displayImage( screen, px, topleft):
    screen.blit(px, px.get_rect())
    if topleft:
        pygame.draw.rect( screen, (128,128,128), pygame.Rect(topleft[0], topleft[1], pygame.mouse.get_pos()[0] - topleft[0], pygame.mouse.get_pos()[1] - topleft[1]))
    pygame.display.flip()

def setup(path):
    px = pygame.image.load(path)
    screen = pygame.display.set_mode( px.get_rect()[2:] )
    screen.blit(px, px.get_rect())
    pygame.display.flip()
    return screen, px

def mainLoop(screen, px):
    topleft = None
    bottomright = None
    runProgram = True
    while runProgram:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                runProgram = False
            elif event.type == pygame.MOUSEBUTTONUP:
                if not topleft:
                    topleft = event.pos
                else:
                    bottomright = event.pos
                    runProgram = False
        displayImage(screen, px, topleft)
    return ( topleft + bottomright )


if __name__ == "__main__":
    screen, px = setup(sys.argv[1])
    left, upper, right, lower = mainLoop(screen, px)
    im = Image.open(sys.argv[1])
    im = im.crop(( left, upper, right, lower))
    im.save(sys.argv[2])

Hope, das hilft:)

Andere Tipps

Für das, was es wert ist (von einem anderen Physiker kommen), würde ich tun dies nur in einem Bildbearbeitungsprogramm wie GIMP . Der Hauptvorteil dieser Aufgabe in Python zu tun (oder jede Sprache) wäre Zeit zu sparen, indem Sie den Prozess zu automatisieren, aber wenn man - na ja, der Professor - irgendwie einen Algorithmus entwickeln automatisch um herauszufinden, was des Bildteils zu beschneiden, es scheint nicht zu viel Zeit, um durch Automatisierung gespeichert werden.

Wenn ich mich richtig erinnere, GIMP ist eigentlich skriptfähig, möglicherweise mit Python, so könnte es möglich sein, einen zeitsparenden GIMP-Skript zu schreiben, zu tun, was Ihr Professor Freund will.

Image.show () ruft nur was einfachen Bildbetrachter es auf der aktuellen Plattform finden, eine, die kann oder auch nicht eine Ernte-und-speichern-Anlage.

Wenn Sie auf einem Windows-sind und Sie brauchen nur, um es auf Ihrem Gerät funktioniert, setzen Sie den ‚Öffnen mit ...‘ Verein es so läuft ein Bild lädt sie in ein Editor Ihrer Wahl zu treffen. Unter OS X und * nix wollen Sie würden die _showxv () -Methode an der Unterseite des Image.py hacken den Befehl zu ändern, um das Bild zu öffnen.

Wenn Sie tatsächlich eine tragbare Lösung zur Verfügung stellen müssen, müssen Sie einen UI-Framework verwenden, um Ihre Zuschneiden Anwendung zu betreiben. Die Auswahl lässt sich auf Tkinter (ImageTk.py gibt Ihnen einen Wrapper für die Anzeige PIL Bilder in Tk), PyQT4 (ImageQt in PIL 1.1.6 gibt Ihnen ein Wrapper für Bilder in QT4) oder wxPython (a geordnete Anwendung Authoring Toolkit wxWidgets) anzeigt. Es wird sein ziemlich viel Arbeit den Dreh eines vollständigen UI-Kit zu bekommen, aber Sie werden in der Lage sein, vollständig anpassen, wie Schnittstelle Ihrer Anwendung funktionieren wird.

Gibt es einen Skript in Python wie eine Bibliothek zum automatischen Zuschneiden von Bildern: automatisch Ernte Bild

Was Sie suchen ist das Modul: matplotlib, es emuliert Matlab. Siehe die G Eingang () Funktion. , Mit denen Sie den Begrenzungsrahmen finden, dann können Sie Ernte von PIL verwenden.

http://matplotlib.sourceforge.net/api/figure_api.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top