matplotlib仅显示最后一张imshow图像 循环绘制gamma校正图如何解决
Google Colab Gamma校正多图像输出修复方案
问题原因
matplotlib默认复用当前激活画布绘图,循环内多次调用plt.imshow()会导致后绘制的内容覆盖前序内容,且未主动触发画布渲染时,只有循环执行完毕后才会输出最终画布上的最后一张图像。
修复后可运行代码
import cv2 import numpy as np import matplotlib.pyplot as plt # 提前读取原始图像(示例代码,替换为你自己的图像读取逻辑即可) # cub = cv2.cvtColor(cv2.imread("你的图像路径"), cv2.COLOR_BGR2RGB) # 注:OpenCV默认返回BGR格式图像,需转换为RGB适配matplotlib显示,否则会出现颜色偏移 gamma_values = [0.1, 0.5, 1.2, 1.8, 2.2] for gamma in gamma_values: # 按指定公式执行Gamma校正 corrected = np.array(255 * (cub / 255) ** gamma, dtype='uint8') # 新建独立画布,避免图像互相覆盖 plt.figure() plt.imshow(corrected) # 为每张图添加Gamma值标题,方便区分 plt.title(f"Gamma={gamma}") # 可选:隐藏坐标轴,更符合图像展示习惯 plt.axis('off') # 主动渲染当前画布,输出本次Gamma对应的校正图像 plt.show()
核心修改说明
- 循环内每次绘图前调用
plt.figure()新建独立画布,避免不同Gamma的校正结果互相覆盖 - 每次绘图完成后调用
plt.show()主动触发画布渲染,保证每张图都能正常输出 - 补充了必要的依赖库导入,避免未定义变量报错
- 新增BGR转RGB提示,避免OpenCV读取图像出现颜色偏移问题
内容的提问来源于stack exchange,提问作者Aditya Sharan
相关产品推荐
相关产品推荐

