图像不显示在ipython中

时间:2015-01-30 13:42:27

标签: ipython

如果图像是while循环的一部分,则不会加载图像。对于例如以下按预期工作:

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

但这不起作用:

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

更新

如何从列表中显示多个图像?

6 个答案:

答案 0 :(得分:13)

这在这里工作正常:

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)

答案 1 :(得分:3)

好的,我和上面的apler细节有完全相同的问题。我将通过一个详细的例子,其中IPython用于创建图像。经过多次尝试,我已成功显示文件中的.jpg图像,确认Mac OSX Yosemite可以使用Python + PIL 显示图像。

我不得不卸载PIL,而是使用Pillow,以便正确识别libjpeg库。 Python代码创建图像 - 但它不会显示图像。

我尝试使用:

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

我在Python中运行这个小程序时看到的是:

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

这个In:看起来是一个IPython提示符。

我正在使用的代码示例似乎专门用于使用IPython Notebook ,它 与IPython或交互式Python相同。

要使用上面的代码(来自Google TensorFlow教程),需要配置一个&#34; IPython Notebook Server&#34;并运行一些名为&#34; Jupyter&#34;。 Jupyter的文档是: http://jupyter-notebook.readthedocs.io/en/latest/

点apler使得很好。我们应该能够使用普通的Python创建一个.jpg文件,并在运行OSX的Mac上显示它。我已经提取了一些代码以显示如何执行此操作。它会创建一个.jpg图像,将其写入文件,然后使用Pillow版本的PIL显示它。 (注意:我必须使用pip卸载原始PIL,然后pip安装Pillow,然后从Ethan.Tira-Thompson.com/Mac_OS_X_Ports.html中选择&#34; libjpeg&#34;库作为.dmg文件现场)。你还需要numpy和scipy.misc模块。

#
# --- 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()

将此文件另存为MakeShowMoire.py。要运行它,请启动终端会话,然后运行Python。我在darwin上使用Python 2.7.10 [GCC 4.2.1兼容的Apple LLVM 6.0(clang 600.0.39)],Mac OSX是10.10.5 Yosemite。当Python运行时,只需输入:

>>> execfile ("MakeShowMoire.py")

示例应该显示在你的Mac上,在一个名为&#34; tmpblahblah.BMP&#34;的窗口中,当你关闭窗口时它会被调整,但是你的testimg.jpg当然会被保留。 我正在使用&#34;导入MakeShowMoire&#34;在Python提示符下运行该文件,但命名空间不映射到交互式Python会话。如果使用execfile函数,则可以再次使用image.show()重新显示文件内容。希望这很有用。

答案 2 :(得分:2)

在IPython笔记本中工作时,解释器在键入单独命令时会给出响应。

例如:

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

但是如果我们在函数或循环中做同样的事情,我们就不会得到响应。

因此,如果要在循环/函数中显示图像,则必须使用显示功能(IPython.display.display)

from IPython.display import display, Image

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

因此Image函数返回一个图像。在解释器中,它将显示,但否则不会。 为确保显示,我们使用显示功能。

这与print命令类似。在解释器中,没有必要使用print命令来查看变量,而在运行程序时则是。

答案 3 :(得分:1)

我尝试了所选择的答案,以及阳光下的其他一切,但无论我尝试什么,它都只会显示最后一张照片。我终于能够使用matplotlib了。

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)

答案 4 :(得分:0)

Import Image from IPython

Pass url to download Image

注意:图像显示在不同的窗口 - 图像查看器中。如果使用QtConsole,可以使用%matplotlib inline

将显示设置为内联

希望这有帮助。

答案 5 :(得分:0)

导入,该功能可以如下重写。完美打开Windows照片查看器,并显示结果分形图像

import tensorflow as tf
import numpy as np
from PIL import Image
from io import BytesIO
from IPython.display import display


def DisplayFractal(a, fmt='jpeg'):
    a_cyclic = (6.28*a/20.0).reshape(list(a.shape)+[1])
    img = np.concatenate([10+20*np.cos(a_cyclic),
                          30+50*np.sin(a_cyclic),
                          155-80*np.cos(a_cyclic)], 2)
    img[a==a.max()] = 0
    a = img
    a = np.uint8(np.clip(a, 0, 255))
    Image.fromarray(a).show()