【问题标题】:display images inside a loop by overwriting the existing plot/figure in python通过覆盖python中的现有绘图/图形在循环内显示图像
【发布时间】:2020-07-09 19:00:53
【问题描述】:

我必须从 URL 获取数十万张图片,查看它们,标记它们,然后将它们作为垃圾邮件或非垃圾邮件保存在各自的类别中。最重要的是,我将与谷歌合作,这使它成为不可能。我的想法是,我不是通过打开、分析、重命名然后将它们保存在目录中来查看每个图像,而是从 url 获取图像,在循环中查看,输入一个单词并基于该输入,我的函数将保存它们在各自的目录中。

我试过了

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import Image

fg = plt.figure()
for i in range(5):
  plt.imshow(np.random.rand(50,50))
  plt.show()
  x = input()
  print(x)

但不是覆盖现有框架,而是绘制不同的图形。我什至在循环中使用了1,1 子图,但它不起作用。 Ipython's 方法甚至也不显示在循环内。有人可以帮我解决这个问题。

【问题讨论】:

    标签: python matplotlib jupyter-notebook ipython python-imaging-library


    【解决方案1】:

    您可以通过调用 plt.ion() 来使用 matplotlib 的交互模式。一个例子:

    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib notebook
    fig, ax = plt.subplots()
    
    plt.ion()
    plt.show()
    for i in range(5): 
        ax.imshow(np.random.rand(50,50))  # plot the figure
        plt.gcf().canvas.draw()
        yorn = input("Press 1 to continue, 0 to break") 
        if yorn==0:
            break
    

    预期输出:

    【讨论】:

    • 你试过代码了吗?实际上它甚至没有显示任何输出图像
    • 查看预期输出。
    • 在我的情况下不起作用。难道是因为colab?
    • 这对我有用(但在上面的示例中,您应该使用yorn == '0' 而不是yorn == 0)。此外,如果您在 jupyter notebook 中有数百张图像,那么很快就会使图像不可见(您必须向上滚动)。我建议制作一个 python 脚本并从命令提示符运行它,这样图像就会显示在一个新窗口中。
    • 如果您使用的是 Google Colab,您可能会觉得这个 SO 很有用。
    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多