【问题标题】:How can I display each picture in a row in ipython(jupyter) notebook?如何在 ipython(jupyter) 笔记本中连续显示每张图片?
【发布时间】:2017-02-23 16:13:02
【问题描述】:

我有一个目录,里面有一些我需要阅读和显示的图片。
我写了这个,但它的作用很奇怪,在循环结束之前它不会显示任何图像!好像它缓冲所有内容然后刷新它!但是行号可以正常工作!这意味着它们在循环进行时被打印出来,当循环结束时,您会看到许多图像显示在单元格上! 这是代码:

import os
%matplotlib inline
img_dir = 'G:/deep-visualization-toolbox/input_images3/'
i = 0
for file in os.listdir(img_dir):
    img = caffe.io.load_image(img_dir+file)
    print '{0})'.format(i)
    plt.figure()
    plt.imshow(img)
    i+=1

和输出:

0)
1)
2)
3)
4)
5)
6)
7)
...

C:\Users\Master\Anaconda2\lib\site-packages\matplotlib\pyplot.py:524: 运行时警告:已打开 20 多个图形。创建的数字 通过pyplot接口(@98​​7654323@)被保留 直到显式关闭并且可能会消耗太多内存。 (控制 此警告,请参阅 rcParam figure.max_open_warning)。 max_open_warning, RuntimeWarning)

21)
22)
...
168)
First image 
second image 
third image 
....

我怎样才能摆脱这个问题并在获取图像时显示它们?

【问题讨论】:

  • %matplotlib inlinefor-loop 内部不生效。您需要在for-loop 内的plt.imshow(img) 之后调用plt.show()。否则,%matplotlib inline 将仅在您退出 for-loop 后应用。
  • @Abdou: 非常感谢,请回复:)

标签: python ipython-notebook jupyter-notebook


【解决方案1】:

您没有看到预期的连续图的原因是因为%matplotlib inlinefor-loop 内部没有生效。因此,您需要在plt.imshow(img) 正下方添加plt.show() 以强制显示该图形。以下是我的做法:

from glob import glob
from scipy.misc import imread
import matplotlib.pyplot as plt


%matplotlib inline


img_dir = 'G:/deep-visualization-toolbox/input_images3/'

i = 0

for img_file in glob(img_dir+'*'):
    img = imread(img_file)
    print '{0}'.format(i)
    plt.figure()
    plt.imshow(img)
    plt.show()
    i+=1

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-24
    • 2016-07-19
    • 2015-10-15
    • 2014-12-26
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多