烂蜻蜓头像
关注
Matplotlib入门教程(十四):imsave() 方法详解——图像保存与格式转换封面图

Matplotlib入门教程(十四):imsave() 方法详解——图像保存与格式转换

一、imsave() 是什么?

imsave() 方法是 Matplotlib 库中用于将图像数据保存到磁盘上的函数。通过 imsave() 方法,我们可以轻松将生成的图像保存到指定的目录中。

核心用途:

用途说明
保存图像将 NumPy 数组保存为图片文件
格式转换支持 PNG、JPEG、BMP 等多种格式
批量输出配合循环批量保存处理结果
数据记录保存实验或分析的可视化结果

与 savefig() 的区别:

对比项imsave()savefig()
保存对象NumPy 数组(图像数据)当前 Figure 对象(整个图表)
输入数组无(作用于当前画布)
适用场景纯图像数据包含标题、坐标轴的完整图表
输出内容只有图像本身图表的所有元素

选择建议: 只想保存图像矩阵用 imsave();保存带标题、坐标轴的图表用 savefig()。

二、imsave() 函数语法

python

matplotlib.pyplot.imsave(fname, arr, **kwargs)

参数说明:

参数说明
fname保存图像的文件名,可以是相对路径或绝对路径
arr表示图像的 NumPy 数组
**kwargs可选参数,用于指定保存的图像格式以及图像质量等参数

常用 kwargs 参数:

参数说明
cmap颜色映射,保存灰度图时常用
vmin, vmax颜色映射的值域范围
format图像格式,如 'png'、'jpg'
dpi分辨率
qualityJPEG 质量(1-100)
三、基础实例:保存随机图像

python

import matplotlib.pyplot as plt
import numpy as np

# 创建一个二维的图像数据
img_data = np.random.random((100, 100))

# 显示图像
plt.imshow(img_data)

# 保存图像到磁盘上
plt.imsave('runoob-test.png', img_data)

代码解析:

代码作用
np.random.random((100, 100))生成 100×100 的随机数组
plt.imshow(img_data)显示图像
plt.imsave('runoob-test.png', img_data)保存为 PNG 文件

以上实例我们使用 imsave() 方法将这个图像保存到了当前目录下,文件名为 runoob-test.png。由于没有指定图像格式,Matplotlib 库默认将其保存为 PNG 格式的文件。

默认行为:

项目默认值
格式PNG(由文件扩展名决定)
颜色映射viridis
值域数据的最小值到最大值

注意: imsave() 保存的是原始数组,不会保留 imshow() 中设置的 cmap。如果要保存为灰度图,需要在 imsave() 中再次指定 cmap。

四、保存灰度图像与彩色图像

python

import matplotlib.pyplot as plt
import numpy as np

# 创建一幅灰度图像
img_gray = np.random.random((100, 100))

# 创建一幅彩色图像
img_color = np.zeros((100, 100, 3))
img_color[:, :, 0] = np.random.random((100, 100))   # R 通道
img_color[:, :, 1] = np.random.random((100, 100))   # G 通道
img_color[:, :, 2] = np.random.random((100, 100))   # B 通道

# 显示灰度图像
plt.imshow(img_gray, cmap='gray')

# 保存灰度图像到磁盘上
plt.imsave('test_gray.png', img_gray, cmap='gray')

# 显示彩色图像
plt.imshow(img_color)

# 保存彩色图像到磁盘上
plt.imsave('test_color.jpg', img_color)

代码要点解析:

操作说明
np.random.random((100, 100))灰度图:二维数组
np.zeros((100, 100, 3))彩色图:三维数组,初始化为 0
img_color[:, :, 0] = ...分别填充 R、G、B 三个通道
imsave(..., cmap='gray')保存灰度图必须指定 cmap
imsave('test_color.jpg', ...)保存彩色图,扩展名决定格式

关键区别:

图像类型数组形状保存时是否需 cmap
灰度图(H, W)需要,否则会套用默认颜色映射
彩色图(H, W, 3)不需要,颜色由数组决定

在保存灰度图像时,我们使用了 cmap 参数将其保存为灰度图像格式。在保存彩色图像时,我们没有指定图像格式,Matplotlib 库默认将其保存为 JPEG 格式的文件(由 .jpg 扩展名决定)。

五、支持的图像格式

imsave() 方法保存图片支持多种图像格式,具体由文件扩展名决定。

格式扩展名特点
PNG.png无损压缩,支持透明,推荐
JPEG.jpg / .jpeg有损压缩,体积小
BMP.bmp无压缩,体积大
TIFF.tiff高质量,适合印刷
PDF.pdf矢量格式
SVG.svg矢量格式

格式选择建议:

需求推荐格式
通用、无损PNG
体积小、可接受有损JPEG
印刷出版TIFF / PDF
网页展示PNG / JPEG
六、常用参数实战
1. 指定值域范围

python

import matplotlib.pyplot as plt
import numpy as np

data = np.random.random((100, 100)) * 100

# 固定颜色映射范围
plt.imsave('output.png', data, cmap='hot', vmin=0, vmax=100)

vmin/vmax 的作用: 固定颜色映射的边界,避免因数据范围变化导致颜色不一致。

2. 保存为灰度图

python

import matplotlib.pyplot as plt
import numpy as np

data = np.random.random((100, 100))

plt.imsave('gray_output.png', data, cmap='gray')
3. JPEG 质量设置

python

import matplotlib.pyplot as plt
import numpy as np

data = np.random.random((100, 100, 3))

plt.imsave('quality_output.jpg', data, quality=95)

quality 参数: 1-100,数值越大质量越高、体积越大,默认 75。

七、批量保存图像

结合循环,批量保存多张图像:

python

import matplotlib.pyplot as plt
import numpy as np

for i in range(5):
    # 生成不同的数据
    data = np.random.random((100, 100))
    # 保存,文件名带序号
    plt.imsave(f'output_{i:03d}.png', data, cmap='gray')

命名技巧: f'output_{i:03d}.png' 生成 output_000.png、output_001.png,序号对齐便于排序。

八、保存流程与完整示例

完整实战示例:

python

import matplotlib.pyplot as plt
import numpy as np

# 中文配置
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 生成灰度图像
gray_img = np.random.random((200, 200))

# 生成彩色图像(红色渐变)
color_img = np.zeros((200, 200, 3))
color_img[:, :, 0] = np.linspace(0, 1, 200).reshape(1, -1)   # 红色渐变
color_img[:, :, 1] = np.linspace(0, 1, 200).reshape(-1, 1)   # 绿色渐变

# 保存灰度图
plt.imsave('output_gray.png', gray_img, cmap='gray')

# 保存彩色图
plt.imsave('output_color.png', color_img)

# 保存热力图
plt.imsave('output_heat.png', gray_img, cmap='hot', vmin=0, vmax=1)

print("图像保存完成!")

输出文件:

文件名类型说明
output_gray.png灰度图黑白显示
output_color.png彩色图红绿渐变
output_heat.png热力图热度颜色映射
九、imsave() vs savefig() 对比实战

python

import matplotlib.pyplot as plt
import numpy as np

data = np.random.random((100, 100))

# 方式一:imsave() 保存纯图像数据
plt.imsave('with_imsave.png', data, cmap='gray')

# 方式二:savefig() 保存完整图表
plt.figure(figsize=(6, 5))
plt.imshow(data, cmap='gray')
plt.title("热力图示例")
plt.colorbar()
plt.savefig('with_savefig.png', dpi=150)
plt.close()

输出效果对比:

文件内容
with_imsave.png只有图像,无标题、无坐标轴、无色条
with_savefig.png完整图表,含标题、色条

实践建议: 展示用的图表用 savefig(),纯图像数据输出用 imsave()。

十、常见问题排查
问题现象可能原因解决方案
灰度图保存后是彩色的未指定 cmap添加 cmap='gray'
保存的图与显示的不一致imsave 不继承 imshow 的设置在 imsave 中重新指定 cmap 和 vmin/vmax
文件格式不支持扩展名拼写错误使用 .png、.jpg、.bmp 等标准扩展名
图像全黑或全白值域超出范围检查数据范围,设置 vmin/vmax
JPEG 质量差默认质量偏低设置 quality=95
中文路径报错编码问题使用英文路径或指定编码
保存路径不存在目录未创建先用 os.makedirs() 创建目录
彩色图保存异常数组形状不对确保最后一维为 3 或 4
十一、小结

本篇你掌握了 Matplotlib imsave() 的完整用法:

  • imsave() 函数:fname 文件名,arr 图像数组。

  • 灰度图:二维数组 + cmap='gray'。

  • 彩色图:三维数组 (H, W, 3),无需 cmap。

  • 格式支持:PNG、JPEG、BMP、TIFF 等,由扩展名决定。

  • 常用参数:cmap、vmin/vmax、quality。

  • 批量保存:配合循环,文件名带序号。

  • 与 savefig 的区别:imsave 保存纯图像数据,savefig 保存完整图表。

imsave() 是图像输出的最后一步,让分析结果得以保存与分享。下一篇我们将学习 Matplotlib 箱线图,用箱体展示数据的统计特征。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/Smell_of_earth/article/details/167658206

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--