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 适用于矩阵、参数保存
相关推荐
zzzzzz310几秒前
GenericAgent 深度解析:3K行代码如何实现自我进化智能体
人工智能
夫唯不争,故无尤也1 分钟前
深度学习优化器:AdamW与SGD的区别
人工智能·深度学习
沉浸式学习ing4 分钟前
B站视频怎么快速总结?AI自动生成要点+思维导图+逐字稿
人工智能·ai·自然语言处理·音视频·语音识别·notion
风止何安啊13 分钟前
用 APP 背单词太无聊?我用 Trae Solo 移动端写个小游戏来准备 6级
前端·人工智能·trae
石榴树下的七彩鱼15 分钟前
AI图像修复技术深度解析:超分辨率、去模糊与上色原理详解(附论文精读+实践指南)
人工智能·深度学习·计算机视觉·超分辨率·石榴智能·ai图像修复
OceanBase数据库官方博客16 分钟前
OceanBase seekdb-cli:专为 AI Agent 设计的数据库接口
数据库·人工智能·oceanbase
MatrixOrigin33 分钟前
什么是AI Native的组织,它该具备什么样的特点
人工智能·ai·opc
xiaoxiaoxiaolll34 分钟前
金属结构疲劳寿命预测与健康监测技术
人工智能·算法·机器学习
AI视觉网奇1 小时前
3d部件拆分PartCrafter
人工智能·大模型
Ether IC Verifier1 小时前
CPU/GPU/NPU/DPU功能详解与AI应用分析
网络·人工智能·网络协议·tcp/ip·计算机网络·dpu