在Jupyter笔记本中输出图像

时间:2018-04-10 00:28:52

标签: image scipy ipython jupyter

以下代码能够按照Jupyter笔记本中的预期打印/输出图像:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
from IPython import display
from scipy.misc import toimage
import numpy as np

n = 3
for _ in range(n):
    (toimage(np.random.rand(32, 32, 3)))
    print("----------------------------")

然而,一旦我把它放在一个函数中,它就会停止工作。为什么?我该如何解决?

def print_images(n=3):
    for _ in range(n):
        (toimage(np.random.rand(32, 32, 3)))
        print("----------------------------")

print_images()

1 个答案:

答案 0 :(得分:1)

display.display_png有效:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
from IPython import display
from scipy.misc import toimage
import numpy as np

n = 3
for _ in range(n):
    display.display_png(toimage(np.random.rand(32, 32, 3)))
    print("----------------------------")

def print_images(n=3):
    for _ in range(n):
        display.display_png(toimage(np.random.rand(32, 32, 3)))
        print("----------------------------")

print_images()

您可以在docs for IPython's display module

中详细了解其工作原理以及其他方式失败

详细

toimage返回的对象采用_repr_png_方法。这是笔记本调用以生成您实际看到的图像的内容。无论出于何种原因(我确信你可以通过挖掘文档来发现),只要对x._repr_png_()的调用在顶部范围内产生任何实例toimage,笔记本就会自动调用x一个细胞。但是,如果toimage在更深层嵌套的范围内运行,则不会自动调用_repr_png_。相反,您必须通过显式调用display.display_png来手动使用相同的显示设备。