OpenCV读取JPG后如何无需预先保存文件直接调整图像质量
OpenCV内存调整JPG质量实现方案
OpenCV支持不经过磁盘文件读写,直接在内存中完成JPG图像质量调整,不需要走「写临时文件-重新读文件」的冗余IO流程。
你当前的实现逻辑本质是对图像做了一次指定参数的JPG重编码,只是把重编码的中间结果写到了磁盘上,这部分完全可以用内存缓冲区替代:
- 用
cv2.imencode替代cv2.imwrite,按照指定的JPG质量参数把图像压缩为JPG格式的字节流,结果直接存在内存中 - 用
cv2.imdecode直接从内存字节流解码得到重编码后的图像,全程没有磁盘读写操作
实现代码如下:
import cv2 import numpy as np # 读取原始图像 img = cv2.imread('image.jpg') # 配置JPG编码参数,第二个值为目标质量,范围0-100,可按需调整 encode_params = [int(cv2.IMWRITE_JPEG_QUALITY), 100] # 内存内完成JPG编码,不生成磁盘文件 encode_status, jpg_buffer = cv2.imencode('.jpg', img, encode_params) if not encode_status: raise RuntimeError("JPG内存编码失败") # 直接从内存缓冲区解码得到调整质量后的图像 img_adjusted = cv2.imdecode(jpg_buffer, cv2.IMREAD_COLOR)
补充说明:JPG是有损压缩格式,所有重编码操作都会带来画质损失,即使质量参数设为100,二次编码后的图像也无法和原始未压缩的源图完全一致,不存在无损失提升JPG画质的方案。
内容的提问来源于stack exchange,提问作者tarako
相关产品推荐
相关产品推荐

