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 适用于矩阵、参数保存
相关推荐
小和尚同志1 天前
AI 自动化测试探索(二):Chrome-devtools MCP
人工智能·e2e·aigc
冬奇Lab1 天前
Workflow 系列(02):设计范式——四层架构、三种 Context 传递模式与确认门设计
人工智能·agent·工作流引擎
冬奇Lab1 天前
每日一个开源项目(第145篇):Trellis - 把项目记忆、规范和任务上下文持久化进代码仓库
人工智能·开源·资讯
有道AI情报局1 天前
Harness即产品
人工智能·agent
罗西的思考1 天前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
IT_陈寒1 天前
SpringBoot自动配置的坑,我的API突然就404了
前端·人工智能·后端
笃行3501 天前
从零到上线:用 EdgeOne Makers + CodeBuddy 搭一个「对账核对员」AI Agent
人工智能
用户6856326208691 天前
Claude Code 乱猜字段名?我给它写了一个"数据库查询约束 Skill"
人工智能
你_好1 天前
# 给你的产品嵌入一个「会操作界面的 AI 助手」
人工智能
ShallWeL1 天前
【机器学习】(3)—— 线性回归:梯度下降
人工智能·机器学习