OpenCV:压缩后图像大小增加

Nit*_*tin 1 python opencv image-compression python-imaging-library

我正在尝试使用quality=90OpenCV 的参数比较压缩前后的一堆图像的大小。但是在压缩之前,我想将它们全部裁剪为固定大小。但是,我不明白,为什么裁剪后的图像平均尺寸小于裁剪+压缩后的图像尺寸?

这是我在做什么:

import cv2
import PIL
from pathlib import Path

image_paths = [...]

cropped_imgs_size = 0
compressed_imgs_size = 0

# crop images
for orig_img_path in image_paths:
    cropped_img_path = "cropped_" + orig_img_path
    PIL.Image.open(orig_img_path).crop((0,0,256,256)).convert('RGB').save(cropped_img_path)
    cropped_imgs_size += Path(cropped_img_path).stat().st_size

    # compress cropped image
    dest_path = "q90_" + cropped_img_path
    cv2.imwrite(dest_path, cv2.imread(cropped_img_path), [int(cv2.IMWRITE_JPEG_QUALITY), 90])
    compressed_imgs_size += Path(dest_path).stat().st_size
Run Code Online (Sandbox Code Playgroud)
  • 预期: compressed_imgs_size < copped_imgs_size
  • 实际: compressed_imgs_size > copped_imgs_size

我想念什么?

Ber*_*iel 6

首先,您使用来保存作物PIL.save()。正如您在文档中看到的那样,默认值是quality=75

save()方法支持以下选项:

  • 质量:图像质量,等级从1(最差)到95(最佳)。该默认值是75。应避免超过95的值;100禁用JPEG压缩算法的某些部分,并导致大型文件的图像质量几乎没有任何提高。

  • ...

然后,您使用cv2.imwrite()pass quality=90。因此,您得到的是预期的行为。