保存图像
函数定义
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图像
import cv2
img = cv2.imread("input.jpg")
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并设置压缩级别
import cv2img = cv2.imread("input.jpg")
cv2.imwrite("output_no_compress.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 0])
cv2.imwrite("output_high_compress.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 9])
示例3:保存为 WebP 格式(高压缩、支持透明)
import cv2
img = cv2.imread("input.jpg")
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 格式(适合高精度图像)
import cv2
import numpy as np
gray16 = np.random.randint(0, 65535, (480, 640), dtype=np.uint16)
cv2.imwrite("output_default.tiff", gray16)
cv2.imwrite("output_tiff_lzw.tiff", gray16, [cv2.IMWRITE_TIFF_COMPRESSION, 5])print("TIFF 保存完成!")
说明:
参数值 | 含义 |
---|
1 | 无压缩 (None) |
5 | LZW 压缩(无损) |
7 | JPEG 压缩(有损) |
32946 | Deflate 压缩 |
8 | PackBits 压缩 |
保存视频
函数定义
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)
import cv2cap = 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:breakout.write(frame) cv2.imshow('frame', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
out.release()
cv2.destroyAllWindows()
示例2:从摄像头保存视频(h264)
import cv2cap = 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:breakout.write(frame) cv2.imshow('frame', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
out.release()
cv2.destroyAllWindows()
保存结构化数据(XML / YAML)
函数定义
cv2.FileStorage(filename, flags)
常见标志
标志 | 说明 |
---|
cv2.FILE_STORAGE_WRITE | 写模式 |
cv2.FILE_STORAGE_READ | 读模式 |
cv2.FILE_STORAGE_APPEND | 追加模式 |
示例:保存与读取 YAML 文件
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 | 适用于矩阵、参数保存 |