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_QUALITY,cv2.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 适用于矩阵、参数保存
相关推荐
天树星智源3 分钟前
每个 token 各配其师:token 级多教师蒸馏拉高 5.9 分
人工智能
米饭是菜qy5 分钟前
深度学习Transformer详细介绍
人工智能·深度学习·transformer
eric-sjq12 分钟前
小思框架 · 30M 级长上下文新架构对比技术报告
人工智能·python·深度学习·语言模型
Kari1115 分钟前
Dify vs Coze开源版:企业级AI应用平台对比
人工智能·开源
AI视频工具指南17 分钟前
AI视频的声音和画面怎么配合?先分清谁在传递信息
人工智能·aigc·音视频
云析赢指标公式网421 分钟前
指标开发笔记|主图搭配双副图成套指标逻辑拆解
人工智能·笔记
奈落2428 分钟前
连错一个端口,Agent就“看不见”工具:从 n8n 的8种AI连接类型到 Dify 的插件审批复用,平台设计里的“隐形接线规则”怎么读
人工智能·agent·ai 编程
这是谁的博客?29 分钟前
AI 加速器 RTL 数字系统设计深度解析:从 MAC 阵列 Verilog 实现到时序收敛与时钟功耗的芯片落地全链路
人工智能·macos·ai·verilog·数字ic设计·ai芯片·rtl
无所畏俱的老尹29 分钟前
OpenAI 等支持 robots.txt 共享 AI 训练偏好信号:policy token 一次声明多厂商,落地仍待实现
人工智能·深度学习·机器学习·aigc
zhangfeng113333 分钟前
用世界模型做AI制药:扰动之心发布虚拟细胞推演模型AlphaCell 1.0 Pr
人工智能·ai药物