图像不显示在ipython中

图像不显示在ipython中,ipython,Ipython,如果图像是while循环的一部分,则不会加载该图像。例如,如预期的以下工程: from IPython.display import Image Image(filename='someimage.jpg') 但这不起作用: while True: Image(filename='someimage.jpg') break 更新: 如何显示列表中的多个图像?在这里可以正常工作: from IPython.display import display, Image path1

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

from IPython.display import Image
Image(filename='someimage.jpg')
但这不起作用:

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

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

在这里可以正常工作:

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)

在IPython笔记本中工作时,口译员将在作为单独命令键入时给出响应

例如:

>>>>a = 5
>>>>a
5
但是如果我们在函数或循环中做同样的事情,我们将不会得到响应

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

因此,Image函数返回一个图像。在解释器中时,它将显示,但在其他情况下不会显示。 为了确保它被显示,我们使用显示功能


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

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

为了正确识别libjpeg库,我不得不卸载PIL,改用枕头。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 : 
将此文件另存为MakeShowMoire.py。要运行它,请启动终端会话,然后运行Python。我在达尔文使用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电脑上,在一个名为“tmpblahblah.BMP”的窗口中,当你关闭窗口时,这个窗口会被倾斜,但是你的testimg.jpg当然会被保留。
我在Python提示符下使用了“import MakeShowMoire”来运行该文件,但是名称空间没有映射到交互式Python会话。如果使用execfile函数,可以再次使用image.show()重新显示文件内容。希望这是有用的。

我尝试了选择的答案,以及太阳底下的所有东西,但无论我尝试了什么,它都只会显示最后一张照片。我终于能够让它与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)

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


希望这有帮助。

导入,该函数可以重写如下。它完美地打开了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()

为什么要在循环中执行此操作?您确定它未加载吗?我已经试过了,在这两种情况下它对我都有效,但在循环中图像不会显示(不是最后计算的表达式);我必须将它保存在一个变量中,然后才能显示它。因为我想显示列表中的多个图像。我尝试打印图像(filename='xyz'),但它仍然不显示它不显示我的任何内容,只返回:>>>display(Image)In:@alper,对我来说,它仍然适用于最新版本的ipython/jupyter。很难说为什么它对你不起作用。这需要在jupyter内部运行吗?那份文件有点混乱。我能不能用python运行一下,看看结果?@alper,这段代码是为ipython/jupyter笔记本编写的。它可能在ipython解释器中工作,也可能不工作——尽管我怀疑它在解释器中是否有用。它在纯python shell中肯定不起作用。可能是版本问题,但我一直在使用提供的Docker映像开发Udacity TensorFlow笔记本,而循环中的映像不起作用。它在循环外工作,在循环内什么也不显示
#display(Image(data=f.getvalue())
scipy.misc.imsave(“testimg.jpg”,a)
Image=PIL.Image.open(“testimg.jpg”)
Image.show()
控制台不保存数据,因此不显示任何内容,除非控制台被告知通过将embed设置为true来保留数据。这给了它一个资源,在建筑物中或显示图像的句柄。请永远不要将代码作为图片发布。这是绝对不允许的堆栈溢出。请删除,这篇文章需要一些编辑。如果你认为你需要包括更多的信息,这不是评论部分的一部分,而是将其添加到你的原始答案中。
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)
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()