保存图像
函数定义
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 |
适用于矩阵、参数保存 |