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 适用于矩阵、参数保存
相关推荐
轻竹办公PPT几秒前
AI 生成 2026 年工作计划 PPT,逻辑清晰度对比测试
人工智能·python·powerpoint
装不满的克莱因瓶1 分钟前
【cursor】前后端分离项目下的AI跨工程管理方案
java·人工智能·ai·ai编程·cursor·trae·qoder
~央千澈~2 分钟前
从阅文招聘JD看网文平台算法化-网文平台拥抱科技·卓伊凡
大数据·人工智能
房产中介行业研习社3 分钟前
2026年1月房产中介管理系统哪家好用
大数据·人工智能
这张生成的图像能检测吗3 分钟前
(论文速读)Set Transformer: 一种基于注意的置换不变神经网络框架
人工智能·深度学习·神经网络·计算机视觉·transformer
Jackchenyj7 分钟前
【无标题】
人工智能·智能体·记忆·思维训练
zyxzyx499 分钟前
从 Transformer 架构看 AI 提效:任务拆解为何能激活大模型的推理能力?
人工智能·架构·transformer
智驱力人工智能9 分钟前
视觉分析赋能路面漏油检测 从产品设计到城市治理的实践 漏油检测 基于YOLO的漏油识别算法 加油站油罐泄漏实时预警技术
人工智能·opencv·算法·yolo·目标检测·计算机视觉·边缘计算
卢卡上学10 分钟前
迎接AI搜索新时代:GEO(生成式引擎优化)的战略价值
人工智能