使用OpenCV旋转图像后保存的文件大小与原文件不一致是什么原因?
问题原因
这个现象是JPEG压缩的正常特性,核心原因有两个:
- 压缩质量参数不一致
OpenCV的cv2.imwrite保存JPEG文件时,默认使用的压缩质量参数为95(取值范围0-100,数值越高画质越好、文件体积越大)。你的原图片1.jpg最初生成时使用的压缩质量明显低于95,哪怕旋转操作本身没有损失像素信息,用更高的质量参数重新保存后,文件体积也会变大。
如果需要控制输出文件的体积,可以手动指定压缩质量,示例代码如下:
cv2.imwrite('2.jpg', rotated_img, [int(cv2.IMWRITE_JPEG_QUALITY), 70])
你可以调整上面的70为不同数值,匹配原文件的体积量级。
- 旋转后图像压缩冗余度变化
JPEG采用基于8×8像素块的离散余弦变换(DCT)实现有损压缩,压缩率和每个像素块内的像素相关性直接相关。图像旋转90度后,原本的8×8像素块的像素分布完全改变,整图的空域冗余度和原图像存在差异,就算你设置和原文件完全相同的压缩质量参数,最终保存的文件体积也会出现差别,这属于JPEG压缩的正常表现。
补充说明:哪怕你不对图像做任何修改,直接将读取的原JPG图像重新用
cv2.imwrite保存,输出文件的体积也大概率和原文件不同,也是上述两个原因共同作用的结果。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

