【问题标题】:Reading images from a folder using matplotlib.image使用 matplotlib.image 从文件夹中读取图像
【发布时间】:2023-03-03 05:59:21
【问题描述】:

我试图在一个图中循环显示图像,这意味着在显示图像 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 次。虽然路径改变了。图像没有改变。请看下面的结果: Here

我怎样才能 1) 在一个图中一个接一个地显示所有图像,即将连续的图像替换为前一个 例如每张图像之间有 1 秒的延迟。 2) 显示所有图像,而不是只重复一张图像?

谢谢

【问题讨论】:

  • 不幸的是,如果您希望所有图像都显示在另一个下方,或者您是否希望连续图像替换前一个图像,则问题并不清楚。
  • @ImportanceOfBeingErnest 我在帖子里说清楚了。

标签: python-2.7 opencv matplotlib


【解决方案1】:
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)

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

【讨论】:

    【解决方案2】:

    使用%matplotlib inline 后端

    %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 notebook 后端

    您可以直接使用交互式后端来显示您的情节。这允许使用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()
         
    

    【讨论】:

      【解决方案3】:

      这是我的解决方案:

      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
      

      【讨论】:

        【解决方案4】:

        更连贯的方法是:

        1. 使用dir()将所有图像名称获取到一个变量中。例如,images = dir(path) Images 将保存路径指向的目录中所有图像的名称。
        2. 然后像这样遍历图像:

          for image in images:
             cur_img =mpimg.imread(image) 
             ... 
             plt.imshow(cur_img)
             sleep(5)    #in seconds
          

        我不喜欢字符串操作的原因是因为它是一个短期修复。这样做更好,这样它就能以更通用的格式工作。

        【讨论】:

        猜你喜欢
        • 2020-02-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 2013-05-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多