Python 2.7 使用matplotlib.image从文件夹中读取图像

Python 2.7 使用matplotlib.image从文件夹中读取图像,python-2.7,opencv,matplotlib,Python 2.7,Opencv,Matplotlib,我试图在一个图中循环显示一个接一个的图像,这意味着在显示图像1后,几秒钟后,图像2将显示在同一个图中。 到目前为止,我有以下代码: import matplotlib.pyplot as plt import matplotlib.image as mpimg %matplotlib inline for i in range(1,4): PATH = "kodim01.png" N = "%02d" % i print PATH.replace("01", N

我试图在一个图中循环显示一个接一个的图像,这意味着在显示图像1后,几秒钟后,图像2将显示在同一个图中。 到目前为止,我有以下代码:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

%matplotlib inline

for i in range(1,4):
     PATH = "kodim01.png"
     N = "%02d" % i
     print PATH.replace("01", N)
     image = mpimg.imread(PATH) # images are color images
     plt.show()
     plt.imshow(image)
但是,它显示一个图像(第一个图像)3次。尽管道路改变了。图像不会改变。请参见以下结果:

如何1)将一个图形中的所有图像依次显示,即将连续图像替换为前一个图像 e、 g.每个图像之间的延迟为1秒。和2)显示所有图像,而不是仅重复一个图像


谢谢

更连贯的方法是:

  • 使用
    dir()
    将所有图像名称获取到一个变量中。例如,
    images=dir(path)
    images将保存路径指向的目录中所有图像的名称
  • 然后循环浏览图像,如下所示:

    for image in images:
       cur_img =mpimg.imread(image) 
       ... 
       plt.imshow(cur_img)
       sleep(5)    #in seconds
    
  • 我不喜欢字符串操作的原因是因为它是短期修复。这样做更好,这样它将以更通用的格式工作。

    以下是我的解决方案:

    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    from time import sleep
    
    %matplotlib inline
    
    for i in range(1,3):
         PATH = "kodim01.png"
         N = "%02d" % i
         print PATH.replace("01", N)
         image = mpimg.imread(PATH.replace("01", N))
    #      plt.show()
         plt.imshow(image)
         sleep(5)    #in seconds
    
    使用
    %matplotlib内联
    后端
    
    %matplotlib inline
    后端将matplotlib打印显示为png图像。您可以使用
    IPython.display
    来显示图像,在本例中,您可以在一段时间后显示另一个图像

    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    from IPython import display
    import time
    
    %matplotlib inline
    
    PATH = "../data/kodim{0:02d}.png"
    
    for i in range(1,4):
        p = PATH.format(i)
        #print p
        image = mpimg.imread(p) # images are color images
        plt.gca().clear()
        plt.imshow(image);
        display.display(plt.gcf())
        display.clear_output(wait=True)
        time.sleep(1.0) # wait one second
    
    请注意,在这种情况下,您不会在同一个图形中显示图像,而是将旧图形的图像替换为新图形的图像

    使用
    %matplotlib笔记本
    后端 您可以直接使用交互式后端显示绘图。这允许使用
    matplotlib.animation.FuncAnimation
    设置绘图动画

    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    import matplotlib.animation as animation
    
    %matplotlib notebook
    
    PATH = "../data/kodim{0:02d}.png"
    
    def update(i):
        p = PATH.format(i)
        #print p
        image = mpimg.imread(p) # images are color images
        plt.gca().clear()
        plt.imshow(image)
    
    ani = animation.FuncAnimation(plt.gcf(), update, range(1,4), interval = 1000, repeat=False)
    plt.show()
         
    

    其中“文件夹”包含扩展名为.png的图像

    谢谢您的回答。我对python非常陌生。我正在这样做,但我收到了一个错误,你知道为什么吗?试试那个。否则,你可以试试:你能解释一下你所说的^^^是什么意思吗?对不起,我的意思是,试试我上面写的编辑。“^^”应该指向上面的帖子。不幸的是,从问题中不清楚您是希望所有图像一个接一个地显示,还是希望后续图像替换上一个图像。@ImportanceOfBeingErnest我在帖子中讲得很清楚。
    import glob
    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    %matplotlib inline
    
    images = []
    for img_path in glob.glob('folder/*.png'):
        images.append(mpimg.imread(img_path))
    
    plt.figure(figsize=(20,10))
    columns = 5
    for i, image in enumerate(images):
        plt.subplot(len(images) / columns + 1, columns, i + 1)
        plt.imshow(image)