OpenCV(三):保存文件

保存图像

函数定义

python 复制代码
cv2.imwrite(filename, img[, params]) -> retval

参数说明

参数名 类型 说明
filename str 要保存的文件路径,例如 "output.jpg""./result.png"
img numpy.ndarray 要保存的图像(通常是 cv2.imread() 或图像处理的结果)
params 可选参数列表 保存时的附加参数(如压缩质量、PNG 压缩级别等)

返回值

  • True:保存成功
  • False:保存失败(如路径错误、无权限等)

常见参数(params

文件类型 参数示例 说明
JPEG [cv2.IMWRITE_JPEG_QUALITY, 90] 图像质量(0~100,默认95)
PNG [cv2.IMWRITE_PNG_COMPRESSION, 3] 压缩等级(0~9,默认3)
WebP [cv2.IMWRITE_WEBP_QUALITY, 80] 图像质量(0~100)
TIFF [cv2.IMWRITE_TIFF_COMPRESSION, 1] TIFF 压缩方式

对比总结

格式 特点 是否支持透明 压缩类型 参数
JPG 最常用,体积小,轻微失真 有损 cv2.IMWRITE_JPEG_QUALITY
PNG 无损,适合图形/透明图 无损 cv2.IMWRITE_PNG_COMPRESSION
WEBP 高压缩率,支持透明 有损 / 无损 cv2.IMWRITE_WEBP_QUALITYcv2.IMWRITE_WEBP_LOSSLESS
TIFF 高精度,科研常用 可选多种压缩方式 cv2.IMWRITE_TIFF_COMPRESSION
BMP 无压缩,简单格式 无压缩 无参数

示例

示例1:保存JPEG图像

python 复制代码
import cv2

# 读取图像
img = cv2.imread("input.jpg")

# 保存为不同质量的JPEG
cv2.imwrite("output_95.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 95])
cv2.imwrite("output_50.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 50])

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

示例2:保存PNG并设置压缩级别

python 复制代码
import cv2

img = cv2.imread("input.jpg")

# 压缩等级0(无压缩)
cv2.imwrite("output_no_compress.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 0])

# 压缩等级9(最高压缩)
cv2.imwrite("output_high_compress.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 9])

示例3:保存为 WebP 格式(高压缩、支持透明)

python 复制代码
import cv2

# 读取一张图片
img = cv2.imread("input.jpg")

# WebP质量范围:0~100,值越高质量越好,文件越大(默认80)
cv2.imwrite("output_webp_80.webp", img, [cv2.IMWRITE_WEBP_QUALITY, 80])
cv2.imwrite("output_webp_20.webp", img, [cv2.IMWRITE_WEBP_QUALITY, 20])

print("WebP 保存完成!")

示例4:保存为 TIFF 格式(适合高精度图像)

python 复制代码
import cv2
import numpy as np

# 创建示例图像(16位灰度)
gray16 = np.random.randint(0, 65535, (480, 640), dtype=np.uint16)

# 保存为 TIFF(默认不压缩)
cv2.imwrite("output_default.tiff", gray16)

# 指定压缩方式(例如 LZW 压缩)
cv2.imwrite("output_tiff_lzw.tiff", gray16, [cv2.IMWRITE_TIFF_COMPRESSION, 5])

print("TIFF 保存完成!")

说明:

参数值 含义
1 无压缩 (None)
5 LZW 压缩(无损)
7 JPEG 压缩(有损)
32946 Deflate 压缩
8 PackBits 压缩

保存视频

函数定义

python 复制代码
cv2.VideoWriter(filename, fourcc, fps, frameSize[, isColor])

参数说明

参数 类型 说明
filename str 输出视频文件路径,例如 "output.mp4"
fourcc int 编码格式标识(FourCC 编码)
fps float 帧率(每秒帧数)
frameSize (width, height) 每帧的宽高
isColor bool 是否为彩色视频(默认为True)

常见 FourCC 编码

编码 说明 常用容器
'XVID' 常见AVI编码 .avi
'MJPG' Motion JPEG .avi
'MP4V' MPEG-4视频编码 .mp4
'H264' H.264编码(需系统支持) .mp4
'avc1' H.264兼容编码 .mp4

示例1:从摄像头保存视频(mp4v)

python 复制代码
import cv2

cap = cv2.VideoCapture(0)  # 打开摄像头
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (640, 480))

while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    out.write(frame)  # 写入一帧
    cv2.imshow('frame', frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
out.release()
cv2.destroyAllWindows()

示例2:从摄像头保存视频(h264)

python 复制代码
import cv2

cap = cv2.VideoCapture(0)  # 打开摄像头
fourcc = cv2.VideoWriter_fourcc(*'H264')
out = cv2.VideoWriter('output_h264.mp4', fourcc, 25.0, (640, 480))

while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    out.write(frame)  # 写入一帧
    cv2.imshow('frame', frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
out.release()
cv2.destroyAllWindows()

保存结构化数据(XML / YAML)

函数定义

python 复制代码
cv2.FileStorage(filename, flags)

常见标志

标志 说明
cv2.FILE_STORAGE_WRITE 写模式
cv2.FILE_STORAGE_READ 读模式
cv2.FILE_STORAGE_APPEND 追加模式

示例:保存与读取 YAML 文件

python 复制代码
import cv2
import numpy as np

# 创建数据
matrix = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)
scalar = 42

# 保存到文件
fs = cv2.FileStorage("data.yaml", cv2.FILE_STORAGE_WRITE)
fs.write("Matrix", matrix)
fs.write("Scalar", scalar)
fs.release()

# 从文件读取
fs = cv2.FileStorage("data.yaml", cv2.FILE_STORAGE_READ)
mat = fs.getNode("Matrix").mat()
val = fs.getNode("Scalar").real()
fs.release()

print("读取的Matrix:\n", mat)
print("读取的Scalar:", val)

总结

功能 API 文件类型 备注
保存图像 cv2.imwrite() JPG、PNG、TIFF、WEBP等 支持压缩参数
保存视频 cv2.VideoWriter AVI、MP4等 需指定编码器和帧率
保存结构化数据 cv2.FileStorage XML、YAML 适用于矩阵、参数保存
相关推荐
nancy_princess9 分钟前
clip实验
人工智能·深度学习
飞哥数智坊12 分钟前
TRAE Friends@济南第4次活动:100+极客集结,2小时极限编程燃爆全场!
人工智能
AI自动化工坊18 分钟前
ProofShot实战:给AI编码助手添加可视化验证,提升前端开发效率3倍
人工智能·ai·开源·github
飞哥数智坊19 分钟前
一场直播涨粉 2 万的背后!OpenClaw + 飞书,正在重塑软件交付的方式
人工智能
飞哥数智坊23 分钟前
养虾记第3期:安装、调教、落地,这场沙龙我们全聊了
人工智能
再不会python就不礼貌了29 分钟前
从工具到个人助理——AI Agent的原理、演进与安全风险
人工智能·安全·ai·大模型·transformer·ai编程
AI医影跨模态组学33 分钟前
Radiother Oncol 空军军医大学西京医院等团队:基于纵向CT的亚区域放射组学列线图预测食管鳞状细胞癌根治性放化疗后局部无复发生存期
人工智能·深度学习·医学影像·影像组学
A尘埃1 小时前
神经网络的激活函数+损失函数
人工智能·深度学习·神经网络·激活函数
没有不重的名么1 小时前
Pytorch深度学习快速入门教程
人工智能·pytorch·深度学习
有为少年1 小时前
告别“唯语料论”:用合成抽象数据为大模型开智
人工智能·深度学习·神经网络·算法·机器学习·大模型·预训练