2015-01-30 2 views
8

Das Bild wird nicht geladen, wenn es Teil einer While-Schleife ist. Für z.B. die folgenden Werke wie erwartet:Bild wird nicht in ipython angezeigt

from IPython.display import Image 
Image(filename='someimage.jpg') 

Aber das funktioniert nicht:

while True: 
    Image(filename='someimage.jpg') 
    break 

Update:

Wie kann ich mehrere Bilder aus einer Liste angezeigt werden?

+0

Warum möchten Sie das in einer Schleife tun? – jrjc

+0

Sind Sie sicher, dass es nicht geladen ist? Ich habe es ausprobiert und es funktioniert in beiden Fällen für mich, aber bei der Schleife wird das Bild nicht angezeigt (nicht der zuletzt ausgewertete Ausdruck); Ich muss es in einer Variablen speichern, und dann kann ich es anzeigen. – JPG

+0

Weil ich mehrere Bilder aus einer Liste anzeigen möchte. Ich habe versucht, Bild drucken (Dateiname = 'xyz'), aber es zeigt es immer noch nicht – shantanuo

Antwort

11

Dies funktioniert hier:

from IPython.display import display, Image 

path1 = "/some/path/to/image1.png" 
path2 = "/some/path/to/image2.png" 

for path in path1, path2: 
    img = Image(path) 
    display(img) 
+11

Zeigt nichts von mir, nur zurück: >>> display (image) In : – Alper

+0

@alper, für mich funktioniert es immer noch mit der neuesten Version von ipython/jupyter. Schwer zu sagen, warum es nicht für dich funktioniert. – cel

+0

Muss dies innerhalb von jupyter ausgeführt werden? Diese Dokumentation ist ein Durcheinander. Kann ich das nicht einfach mit Python ausführen und das Ergebnis sehen? – Alper

1

Wenn in IPython Notebooks arbeiten, wird der Interpreter eine Antwort geben, wenn als separater Befehl eingegeben haben.

So zum Beispiel:

>>>>a = 5 
>>>>a 
5 

Aber wenn wir die gleiche Sache in einer Funktion oder Schleife zu tun, würden wir nicht die Antwort.

Also, wenn Sie Bilder von innerhalb einer Schleife/Funktion angezeigt werden soll, werden Sie die Anzeigefunktion (IPython.display.display)

from IPython.display import display, Image 

for image_path in images: # images is a list of paths 
    display(Image(image_path)) 

So ist die Bildfunktion zurückkehrt, ein Bild zu verwenden. Im Interpreter wird es angezeigt, ansonsten nicht. Um sicherzustellen, dass es angezeigt wird, verwenden wir die Anzeigefunktion.

Dies ähnelt dem Druckbefehl. Wenn es im Interpreter ist, ist es nicht notwendig, den Befehl print zu verwenden, um Variablen anzuzeigen, während dies beim Ausführen eines Programms der Fall ist.

3

Ok, ich habe genau das gleiche Problem wie oben Apler Details. Ich gehe durch ein detailliertes Beispiel, wo IPython verwendet wird, um ein Bild zu erstellen. Nach mehreren Versuchen habe ich erfolgreich ein .jpg Bild aus einer Datei angezeigt, und bestätigt Mac OSX Yosemite kann Python + PIL verwenden, um ein Bild anzuzeigen.

Ich musste PIL deinstallieren und stattdessen Pillow verwenden, damit die libjpeg-Bibliothek korrekt erkannt wird. Der Python-Code erstellt ein Bild - aber es wird nicht Anzeige das Bild.

Ich versuche, das Bild zu erzeugen mit:

f = BytesIO() 
PIL.Image.fromarray(a).save(f, 'jpeg') 
clear_output(wait = True) 
display(Image(data=f.getvalue())) 

Was ich sehe, wenn ich das kleine Programm in Python laufen ist:

<IPython.core.display.Image object> 
In : 

Dieses In: sieht eine IPython prompt sein.

Es scheint, dass der Code Beispiel, das ich durch arbeite speziell verwenden IPython Notebook die ist nicht dafür ausgelegt ist die gleiche wie IPython oder interaktive Python.

Um den obigen Code zu verwenden, der aus dem Google TensorFlow Tutorial stammt, muss man einen "IPython Notebook Server" konfigurieren und etwas namens "Jupyter" ausführen.Die Dokumentation für Jupyter Zeug ist unter: http://jupyter-notebook.readthedocs.io/en/latest/

Der Punkt, den Apler macht, ist gut. Wir sollten einfach Python verwenden können, um eine JPG-Datei zu erstellen und sie auf einem Mac mit OSX anzuzeigen. Ich habe etwas Code gezogen, um zu zeigen, wie das geht. Es erstellt ein JPG-Bild, schreibt es in eine Datei und zeigt es dann mit der Kissenversion von PIL an. (Hinweis: Ich musste pip verwenden, um das Original-PIL zu deinstallieren, dann Pill installieren, Pillow, und ich habe die "libjpeg" -Bibliothek als .dmg-Datei von der Ethan.Tira-Thompson.com/Mac_OS_X_Ports.html-Seite abgeholt). Sie benötigen auch numpy und scipy.misc Module.

# 
# --- Make+Show immediately a simulated Moire pattern as a .jpg file 
# 
# --- start Python and import this file with: import MakeShowMoire 
# --- or use: execfile ("MakeShowMoire.py") 
# 
# --- import modules we need 
from PIL import Image, ImageDraw 
import numpy as np 
import scipy.misc 
# 
# --- Ok, lets go.. 
width = 1020 
height = 710 
channels = 3 
# 
img = np.zeros((height, width, channels), dtype=np.uint8) 
xx, yy = np.mgrid[:height, :width] 
circle = (xx - 100) ** 2 + (yy - 100) ** 2 
for y in range(img.shape[0]): 
    for x in range(img.shape[1]): 
     r, g, b = circle[y][x], circle[y][x], circle[y][x] 
     img[y] [x] [0] = r 
     img[y] [x] [1] = g 
     img[y] [x] [2] = b 

# 
# --- now, we have made the image, lets save it 
scipy.misc.imsave("testimg.jpg", img) 
# 
# --- Since we have saved it, we should be able to display it 
image = Image.open("testimg.jpg") 
image.show() 

Speichern Sie diese Datei als MakeShowMoire.py. Starten Sie eine Terminalsitzung, und führen Sie Python aus, um das auszuführen. Ich benutze Python 2.7.10 [GCC 4.2.1 Kompatibel Apple LLVM 6.0 (clang 600.0.39)] auf Darwin, und Mac OSX ist 10.10.5 Yosemite. Wenn Python läuft, geben Sie einfach:

>>> execfile ("MakeShowMoire.py") 

Und das Beispiel sollte, genannt „tmpblahblah.BMP“ in einem Fenster auf Ihrem Mac, angezeigt werden, die aufgeschlagen wird, wenn Sie das Fenster schließen, aber Ihre testimg.jpg beibehalten wird , Na sicher. Ich verwendete "Import MakeShowMoire" an der Python-Eingabeaufforderung, um die Datei auszuführen, aber der Namespace wird nicht der interaktiven Python-Sitzung zugeordnet. Wenn Sie die Funktion execfile verwenden, können Sie den Dateiinhalt mit image.show() erneut anzeigen. Ich hoffe, das ist nützlich.

+0

Ich habe Folgendes mit dem ursprünglichen Tensorflow-Beispiel gemacht. '#display (Bild (Daten = f.getvalue()))' 'scipy.misc.imsave (" testimg.jpg ", a)' 'Bild = PIL.Image.open (" testimg.jpg ") ' ' image.show() ' – Emile

1

Ich versuchte die gewählte Antwort und fast alles andere unter der Sonne, aber egal was ich versuchte, es würde nur das letzte Foto anzeigen. Ich konnte endlich mit matplotlib arbeiten.

import glob 
import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 

def display_photo(path): 
    print("File: {}".format(path)) 
    img = mpimg.imread(path) 
    imgplot = plt.imshow(img) 
    plt.show() 

for path in glob.iglob('my_photos/*'): 
    display_photo(path) 
0

Import Image from IPython

Pass url to download Image

Hinweis: Das Bild wird in einem anderen Fenster - Bildbetrachter. Bei Verwendung von QtConsole könnte man die Anzeige auf Inline setzen, indem man %matplotlib inline

Hope dies hilft.

+0

Die Daten werden nicht von der Konsole gehalten, so dass nichts angezeigt werden kann, es sei denn, die Konsole wird angewiesen, die Daten beizubehalten, indem sie embed auf true setzt. Das gibt ihm eine Ressource zum Erstellen oder Anzeigen des Bildes. –

+2

Bitte, ** niemals ** PLZ als Bild. Das ist ein absoluter Verzicht auf Stack Overflow. Bitte entfernen Sie das, dieser Beitrag erfordert einige Änderungen. Wenn Sie der Meinung sind, dass Sie mehr Informationen hinzufügen müssen, ist dies nicht Teil des Kommentars, sondern fügen Sie ihn Ihrer ursprünglichen Antwort hinzu. –