2016-10-26 7 views
-2

In Ordnung, also muss ich in meinen Instructors eigenen Worten: -Lesen Sie alle Bilder im Verzeichnis images -Erstellt ein Histogramm für jedes Bild. Ihre Histogrammfunktion kann die PIL-Funktion Image.historamt nicht verwenden.Probleme mit den Pfaden haben

Ich habe diesen grundlegenden Code so weit gekommen:

from os import listdir 
from PIL import Image as PImage 

def loadImages(path): 
    imagesList = listdir(path) 
    loadedImages = [] 
    for image in imagesList: 
     img = PImage.open(path + image) 
     loadedImages.append(img) 
    return loadedImages 
path = "/ 

imgs = loadImages(path) 

for img in imgs: 
    img.show() 

Mit der Ausgabe der Weg zu sein =/Bit. Ich weiß nicht, wie man es richtig schreibt, so dass das Programm eine Datei namens "Bilder" von meinem Desktop liest (oder irgendwo anders kann ich es setzen, wenn Sie empfehlen).

Bitte antworten Sie so schnell wie möglich, ich kann nicht in meiner Aufgabe Fortschritte machen, bis ich dies tue.

+1

Sie nicht erwähnt, was schief gelaufen ist, wenn Sie Ihren Code laufen. Das ist ein wichtiger Teil, um herauszufinden, was das Problem ist. Übrigens, Print ist dein Freund. Führe 'print (Pfad + Bild)' in deiner for-Schleife aus, um zu sehen, was du bekommst. – tdelaney

+0

"Mit dem Problem ist der Pfad =/Bit. Ich weiß nicht, wie es richtig zu schreiben, so dass das Programm liest eine Datei namens" Bilder "von meinem Desktop (oder wo auch immer ich kann es, wenn Sie empfehlen)." –

+0

Ihr Code liest alle Bilder in einem Verzeichnis, aber Sie sagen, Sie möchten eine einzelne Datei namens "Bilder" lesen. Verwirrend! – tdelaney

Antwort

0

Sie sollten os.path für die Arbeit mit Dateipfaden verwenden.

import os 

for filename in filelist: 
    full_path = os.path.join(path, filename) 

Sie sollten auch bedenken, dass os.listdir enthält auch Verzeichnisse in seinen Ergebnissen. Außerdem gibt es einen möglichen Fehler in Ihrem Code, wo Sie path definieren, es sieht so aus, als ob Sie ein Schlusskurs verpassen.

+0

Mein Problem ist, ich habe keine Ahnung, was mein Pfad oder Dateiliste ist. Dies hat nicht funktioniert. Es wurde ein Fehler bei Literalen verursacht. –

+0

Wie wollen Sie Dateien öffnen, wenn Sie nicht wissen, wo sie sich befinden? 'path' sollte etwas wie' '/ path/to/mypics'' sein und' filelist' sollte 'os.listdir (path)' sein. – sytech

0

Verwenden os.path.join(path, filename) den Dateipfad zu erstellen:

import os 
import os.path 
from PIL import * 

def loadImages(path): 
    return [PImage.open(os.path.join(path, image)) for image in os.listdir(path)] 

for img in loadImages('/'): 
    img.show() 
+0

Ich kann PIL nicht für das Histogramm verwenden, und ich weiß immer noch nicht wie von meiner Schule zu fahren. –

+0

gehen Sie zu dem Ordner mit den Fotos, klicken Sie mit der rechten Maustaste auf eines der Fotos, klicken Sie auf "Eigenschaften", schauen Sie, was "Standort" ist – Uriel

+0

Danke Uriel! Ich werde das versuchen! –

0

Hier ist eine Lösung, die

  • den Benutzer auf, einen Pfad fordert
  • verwendet os.path.join Scan-Datei zu erstellen Namen
  • filtert Namen von Unterverzeichnissen
  • fängt PIL-Fehler

Ich denke, es ist die ursprünglichen Anforderungen abdeckt

import os 
from PIL import Image as PImage 

def loadImages(path): 
    # paths to files in directory with non-files filtered out 
    images = filter(os.path.isfile, (os.path.join(path, name) 
     for name in os.listdir(path))) 
    loadedImages = [] 
    for image in images: 
     try: 
      loadedImages.append(PImage.open(image)) 
      print("{} is an image file".format(image)) 
     except OSError: 
      # exception raised when PIL decides this is not an image file 
      print("{} is not an image file".format(image)) 
    return loadedImages 

while True: 
    path = input("Input image path: ") 
    # expand env vars and home directory tilda 
    path = os.path.expanduser(os.path.expandvars(path)) 
    # check for bad input 
    if os.path.isdir(path): 
     break 
    print("Not a directory. Try again.") 

imgs = loadImages(path) 

for img in imgs: 
    img.show()