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

4

我想在同一个图中循环显示一系列图片,也就是说,当显示完图片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)

然而它显示了同一张图片(第一张图片)三次,尽管路径已更改。 图片未更改,请参见下面的结果:这里 我该如何做才能1)依次显示所有图像,并将连续的图像替换为先前的图像,例如每个图像之间有1秒的延迟。 2)显示所有图像,而不仅仅是重复的一张图像?
谢谢

很遗憾,从问题中并不清楚您是想要所有图像一个接一个地显示,还是想要后续图像替换前一个图像。 - ImportanceOfBeingErnest
@ImportanceOfBeingErnest 我在帖子中已经表明了。 - Albert
4个回答

1
更连贯的做法是:
  1. use dir() to obtain all the image names into a variable. For example images = dir(path) Images will hold all the names of the images in your directory pointed to by your path.
  2. Then loop through the images like so:

    for image in images:
       cur_img =mpimg.imread(image) 
       ... 
       plt.imshow(cur_img)
       sleep(5)    #in seconds
    
我不喜欢字符串操作的原因是它只是一个短期解决方案。用更通用的方式来处理会更好。

谢谢你的回答。 我对Python非常陌生。我正在做这个,但是我收到了一个错误,你知道为什么吗?https://user-images.githubusercontent.com/12434910/29000490-54788a38-7a21-11e7-8ba8-8069e43be6df.png - Albert
尝试一下^^。否则,您可以尝试:https://dev59.com/Xl0a5IYBdhLWcg3whJDW#30231168 - Jonathan
请问您能解释一下 ^^ 的意思吗? - Albert
抱歉,我的意思是,请尝试我上面写的编辑。 “^^” 应该指向上面的帖子。 - Jonathan

1
这是我的解决方案:
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

1

使用%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()
     

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)

“folder”包含扩展名为.png的图像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接