Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。在日常使用过程中,我们有时读取视频,并经过一系列的处理后,想要动态的显示每张经过处理后的结果图,在这里我主要介绍怎么使用matplotlib来动态显示图片,并同时介绍怎么动态显示多个视频。
1、显示一张图片
这个很简单,也并没有什么难度。
1 2 3 4 5 6 7 8 9 10 11 12 | import os from PIL import Image import matplotlib.pyplot as plt img = Image.open(os.path.join('images', '2007_000648' + '.jpg')) plt.figure("Image") # 图像窗口名称 plt.imshow(img) plt.axis('on') # 关掉坐标轴为 off plt.xticks([]) # 去刻度 plt.yticks([]) plt.show() |
读取的结果图如下:
2、动态的显示多个图像
上代码前分析一下:
- 1、需要在整个for 循环的前面加plt.figure() ,如果想要加显示几个视频,就需要加几个plt.figure() ,如果在for 循环里面加plt.figure(),这个函数就会新建一个画布,打开一个新的窗口,这样图像就没法在一个窗口上显示了,这是我们不希望的结果
- 2、在这里不加plt.show() ,但是加了plt.pause() 这个函数,如果当前有活动的画布,那个这个函数会先执行画布的更新和显示,所以就不用了 show函数来显示了。
- 3、调用figure() 的句柄来清除画布fig.clf()
调用的格式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import matplotlib.pyplot as plt # 打开交互模式 plt.ion() fig1 = plt.figure('frame') # fig2 = plt.figure('subImg') for i in range(0, numsFrame): # 进行自己的处理 #--------动态显示----------# ax1 = fig1.add_subplot(1, 1, 1) ax1.axis('off') # 关掉坐标轴 ax1.imshow(frame_gray, cmap='gray') ax1.plot(p1[:, 0], p1[:, 1], 'g.') #停顿时间 plt.pause(0.1) #清除当前画布 fig1.clf() plt.ioff() |