使用matplotlib显示图像,并且能够在窗口内动态刷新(定时/按键)检视数据。
matplotlib动态刷新显示图像
1 定时刷新
1.1 代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import os import time import matplotlib.pyplot as plt import matplotlib.image as mpimg
image_root = "/data/image_dir/"
plt.ion() for content in contents: text = content.text image_filename = content.image print("%s\t\t%s" % (text, image_filename)) image = mpimg.imread(os.path.join(image_root, image_filename)) plt.imshow(image) plt.title(text) plt.pause(1) plt.clf()
|
1.2 注意事项
1.2.1 plt.ion()
函数
函数plt.ion()
是动态刷新的关键,官方函数定义如下
1 2 3 4
| def ion(): """Turn the interactive mode on.""" matplotlib.interactive(True) install_repl_displayhook()
|
ion
函数说明为:Turn the interactivate mode on。
1.2.2 plt.clf()
函数
另外,关于plt.clf()
函数:
摘自【matplotlib
动态显示图片】的注意事项:
在动态显示图片的过程当中,发现随着显示图片数增加,画面变得越来越卡。这是因为内存没有释放,导致变卡。
所以加上plt.clf()
这条语句之后能够及时清除figure。
2 按键刷新
2.1 代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import os import time import matplotlib.pyplot as plt import matplotlib.image as mpimg
image_root = "/data/image_dir/"
plt.ion() for content in contents: text = content.text image_filename = content.image print("%s\t\t%s" % (text, image_filename)) image = mpimg.imread(os.path.join(image_root, image_filename)) plt.imshow(image) plt.title(text) input() plt.clf()
|
2.2 注意事项
关于python的matplotlib库下实现按键后切换show图片
假如用plt.ion不会卡住,但一定要用plt.pause让窗口保留,然后用input等待键盘输入后才开始下一个循环
网上的做法如上摘录,一般会设置0.01秒pause停留。不过我发现注释掉,不做pause其实也是正常的,没发现什么影响。此处存疑。
input()
函数接收按键输入,不输入的话,直接回车Enter结束即可,可实现按Enter键更新下一张图像及文本的效果。
3 仅显示
此处另附最基本的形式,即仅显示图文,无动态刷新,作参考。
3.1 代码示例
1 2 3 4 5 6 7 8 9 10 11
| import os import matplotlib.pyplot as plt import matplotlib.image as mpimg
image_root = "/data/image_dir/"
image_path = os.path.join(image_root, 'demo.jpg') image = mpimg.imread(image_path) plt.imshow(image) plt.title("Image and text") plt.show()
|
4 参考链接
查阅到的类似情形的相关博客如下:
关于python的matplotlib库下实现按键后切换show图片
【matplotlib
动态显示图片】
Python中matplotlib实时画图