解决python使用opencv库批量resize图片导致文件大小反常变化

1.发现问题

在处理数据集的时候,发现有几张图片分辨率不一样,于是使用cv2.resize将分辨率8192 × 2649的几张图片拉到8192 × 3000,结果文件大小从1.5MB变到3.9MB,翻了一倍多,就感觉哪里好像有点问题。

for image in files:
    img = cv2.imread(os.path.join(path, image))
    resize = cv2.resize(img, (8192, 3000), interpolation=cv2.INTER_LINEAR)
    dstPath = join(dstpath, image)
    cv2.imwrite(dstPath, resize)

在这篇文章中也有类似情况https://blog.csdn.net/weixin_52135595/article/details/124258403#comments_25393526分辨率降低,文件大小反而增加了。

2.查找资料

查找相关resize资料:https://blog.csdn.net/weixin_41466575/article/details/113058802

resize(InputArray src, OutputArray dst, Size dsize, 
        double fx=0, double fy=0, int interpolation=INTER_LINEAR )

更换interpolation(插值)方式后,文件大小依然很大。

换个思路从cv2.imwrite又查到了这篇文章https://blog.csdn.net/weixin_41819299/article/details/123503001 PYTHON中基于OPENCV进行图像压缩。

cv2.imwrite(new_im_path,img, [cv2.IMWRITE_JPEG_QUALITY, quality])

3.问题解决

cv2.imwrite还有第三个参数,通过IMWRITE_JPEG_QUALITY可以修改保存的图片质量,quality范围为0-100,越大图像质量越高,越小越压缩,不同图像的quality衰减情况不同,默认是95,于是我将quality设为50,成功输出1MB的图片,这样就与数据集其它图片大小差不多了。

img = cv2.imread(os.path.join(path, image))
resize = cv2.resize(img, (8192, 3000), interpolation=cv2.INTER_LINEAR)
dstPath = join(dstpath, image)
cv2.imwrite(dstPath, resize, [cv2.IMWRITE_JPEG_QUALITY, 50])

4.其它方式

使用PIL库也可以,文件大小差不多是按比例增加,在本文中的图片上从1.5MB变到1.6MB,具体实现方式可以参考这篇文章https://blog.csdn.net/weixin_40163266/article/details/115314453

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用PythonOpenCV批量调整图片大小,你可以按照以下步骤进行操作: ```python import cv2 import os def batch_resize_images(input_dir, output_dir, size): # 确保输出目录存在 if not os.path.exists(output_dir): os.makedirs(output_dir) # 遍历输入目录中的所有文件 for filename in os.listdir(input_dir): # 获取文件路径 input_path = os.path.join(input_dir, filename) # 检查文件是否为图像文件 if os.path.isfile(input_path) and filename.lower().endswith(('.jpg', '.jpeg', '.png')): # 读取图像 image = cv2.imread(input_path) # 调整图像大小 resized_image = cv2.resize(image, size) # 构造输出文件路径 output_path = os.path.join(output_dir, filename) # 保存调整后的图像 cv2.imwrite(output_path, resized_image) # 调用函数进行批量调整图片大小 input_dir = "input_folder" # 输入目录,包含要调整大小图片文件 output_dir = "output_folder" # 输出目录,保存调整后的图片文件 size = (500, 500) # 要调整的目标尺寸,例如 (width, height) batch_resize_images(input_dir, output_dir, size) ``` 请将代码中的`input_folder`替换为包含要调整大小图片文件的实际输入目录,将`output_folder`替换为你希望保存调整后图片的输出目录,将`size`替换为你想要调整的目标尺寸。这段代码将遍历输入目录中的所有图片文件(以.jpg、.jpeg或.png结尾),将它们调整为指定的尺寸,并保存到输出目录中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值