如何在Spyder中按顺序渲染图像 目前仅能成功显示最后一张图像
问题根源
你当前的代码仅显示最后一张图像,是因为skimage.io.imshow底层依赖Matplotlib绘图库,默认复用同一个活跃画布绘制内容,后续的绘图操作会直接覆盖前序的画布内容,且你没有触发画布渲染的操作,所以最终仅保留最后一次imshow的结果。
如果你的Spyder配置的是Inline绘图模式(默认在IPython控制台内嵌显示图像),也会出现所有绘图堆叠仅显示最后一张的情况,切换为Automatic后端(独立窗口显示)可以获得更好的交互体验。
解决方案
根据你的使用需求可以选择对应方案:
- 场景1:逐张手动查看(关闭当前图像窗口后自动弹出下一张)
需要导入matplotlib.pyplot,每次调用imshow后执行plt.show()阻塞渲染,直到手动关闭当前窗口才会执行后续代码,参考代码:from skimage.io import imread, imshow import matplotlib.pyplot as plt img_5 = imread('C:/abc1.png') imshow(img_5) plt.show() img_6 = imread('C:/abc2.png') imshow(img_6) plt.show() - 场景2:同窗口并列显示所有图像
用Matplotlib的子图功能把所有图像放在同一个窗口内,方便对比查看,参考代码:from skimage.io import imread, imshow import matplotlib.pyplot as plt # 读取所有图像 img_5 = imread('C:/abc1.png') img_6 = imread('C:/abc2.png') # 创建1行2列的子图布局 plt.subplot(1, 2, 1) imshow(img_5) plt.title('第一张图像') plt.subplot(1, 2, 2) imshow(img_6) plt.title('第二张图像') plt.show() # 统一渲染所有子图 - 场景3:自动轮播依次显示
不需要手动关窗,每张图像停留固定时长后自动切换到下一张,参考代码:from skimage.io import imread, imshow import matplotlib.pyplot as plt img_5 = imread('C:/abc1.png') imshow(img_5) plt.pause(3) # 停留3秒,数值可自定义 plt.clf() # 清空当前画布准备下一张绘图 img_6 = imread('C:/abc2.png') imshow(img_6) plt.pause(3) plt.clf() plt.show() # 最后一张停留到手动关闭
内容的提问来源于stack exchange,提问作者user15761564
相关产品推荐
相关产品推荐

