【发布时间】:2019-12-01 03:40:31
【问题描述】:
我正在尝试使用 OpenCV 的 quality=90 参数比较压缩前后一堆图像的大小。但在压缩之前,我想将它们全部裁剪为固定大小。但是,我不明白为什么裁剪后的图像平均尺寸小于裁剪+压缩后的图像尺寸?
这是我正在做的事情:
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
- 预期:
compressed_imgs_size < copped_imgs_size - 实际:
compressed_imgs_size > copped_imgs_size
我错过了什么?
【问题讨论】:
-
你能附上一个示例输入图像和裁剪坐标吗?文件大小的实际差异是什么?
-
我使用牛津宠物数据集作为
image_paths。使用上述代码,裁剪图像的平均大小约为 14KB,压缩后的大小约为 20KB。在colab.research.google.com/drive/… 分享了其他指标
标签: python opencv python-imaging-library image-compression