Python使用OpenCV实现图片的批量压缩

 更新时间:2025年09月01日 15:32:06   作者:Ratten  
在日常开发中,我们经常需要处理大量的图片文件,本文将介绍如何使用Python和OpenCV库来批量压缩图片,并对实现相同功能的技术进行对比分析,希望对大家有所帮助

1. 前言

在日常开发中,我们经常需要处理大量的图片文件,例如调整图片大小以适应不同的显示需求或减少存储空间。本文将介绍如何使用Python和OpenCV库来批量压缩图片,并对实现相同功能的技术进行对比分析。

2. 技术对比选择

Pillow库: Pillow是Python Imaging Library (PIL) 的一个分支,提供了丰富的图像处理功能。与OpenCV相比,Pillow更专注于图像处理,API更加简洁易用。但是,OpenCV在处理计算机视觉任务时更加强大。

ImageMagick: ImageMagick是一个功能强大的图像处理工具集,支持多种编程语言。它提供了命令行工具和编程接口,可以处理各种图像格式。与OpenCV相比,ImageMagick在处理复杂图像操作时更加灵活,但学习曲线较陡峭。

OpenCV:之所以采用 OpenCV,是因为之前学习过 OpenCV,同时之前使用 Pillow 实现过批量图片压缩,所以这次开发使用 OpenCV。

3. 实现分析

读取图片: 使用cv2.imread()函数读取图片文件。如果图片无法读取,函数会返回None,此时程序会输出错误信息并返回。

计算新高度: 为了保持图片的宽高比,我们需要根据指定的宽度计算新的高度。公式为:height = int(width * image.shape[0] / image.shape[1]),其中image.shape[0]是原图片的高度,image.shape[1]是原图片的宽度。

调整图片大小: 使用cv2.resize()函数调整图片大小。interpolation=cv2.INTER_AREA参数用于指定插值方法,该方法在缩小图片时效果较好。

保存图片: 使用cv2.imwrite()函数将调整大小后的图片保存到指定路径。

4. 压缩实现代码

实现图片压缩的核心代码:

import cv2
import os

def resize_image(input_path, output_path, width=600):
    # 读取图片
    image = cv2.imread(input_path)
    if image is None:
        print(f"无法读取图片: {input_path}")
        return
    
    # 计算新的高度以保持宽高比
    height = int(width * image.shape[0] / image.shape[1])
    
    # 调整图片大小
    resized_image = cv2.resize(image, (width, height), interpolation=cv2.INTER_AREA)
    
    # 保存图片
    cv2.imwrite(output_path, resized_image)
    print(f"已保存: {output_path}")

5. 批量处理实现

在主函数,用于遍历文件夹中的所有图片文件并调用resize_image函数进行处理:

def main():
    # 输入和输出文件夹路径
    input_folder = "images"
    output_folder = "output"
    
    # 创建输出文件夹(如果不存在)
    os.makedirs(output_folder, exist_ok=True)
    
    # 遍历输入文件夹中的所有图片文件
    for filename in os.listdir(input_folder):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, filename)
            resize_image(input_path, output_path)

if __name__ == "__main__":
    main()

6. 执行代码效果

7. 处理前图片

具体图片文件分辨率和大小

所有图片的大小

8. 处理后图片

具体图片文件分辨率和大小

所有图片的大小

9.总结

使用 OpenCV 库来批量压缩图片。通过cv2.imread()cv2.resize()cv2.imwrite()等函数,我们可以轻松实现图片的读取、调整大小和保存。

对比了其他实现相同功能的技术,如Pillow库和ImageMagick。在实际开发中,我们可以根据具体需求选择合适的技术来处理图片。

由于图片是给手机端使用,又担心图片的分辨率太低,导致在手机上展示效果不好,因此最后设置宽度是 600px,即便如此,也可以看出整体图片的总压缩将近15倍,当然具体的不能这么计算,但是在移动端访问的确解决了问题。

到此这篇关于Python使用OpenCV实现图片的批量压缩的文章就介绍到这了,更多相关OpenCV图片压缩内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 对python dataframe逻辑取值的方法详解

    对python dataframe逻辑取值的方法详解

    今天小编就为大家分享一篇对python dataframe逻辑取值的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python中的print()输出

    python中的print()输出

    print() 方法用于打印输出,最常见的一个函数。这篇文章主要介绍了python的print()输出 ,需要的朋友可以参考下
    2019-04-04
  • opencv 形态学变换(开运算,闭运算,梯度运算)

    opencv 形态学变换(开运算,闭运算,梯度运算)

    这篇文章主要介绍了opencv 形态学变换(开运算,闭运算,梯度运算),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Python实现孤立随机森林算法的示例代码

    Python实现孤立随机森林算法的示例代码

    孤立森林(isolation Forest)是一种高效的异常检测算法,它和随机森林类似,但每次选择划分属性和划分点(值)时都是随机的,而不是根据信息增益或基尼指数来选择。本文将用Python实现这一算法,需要的可以参考一下
    2022-03-03
  • python利用WordCloud模块实现词云绘制

    python利用WordCloud模块实现词云绘制

    wordcloud是词云绘图模块,封装了WordCloud词云类,是词云的基本载体,下面小编就来和大家详细讲讲如何利用WordCloud模块实现词云绘制吧,希望对大家有所帮助
    2023-10-10
  • 如何将numpy二维数组中的np.nan值替换为指定的值

    如何将numpy二维数组中的np.nan值替换为指定的值

    这篇文章主要介绍了将numpy二维数组中的np.nan值替换为指定的值操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python实现超级玛丽游戏

    python实现超级玛丽游戏

    这篇文章主要为大家详细介绍了python实现超级玛丽游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • python实现读取并显示图片的两种方法

    python实现读取并显示图片的两种方法

    本篇文章主要介绍python实现读取并显示图片的两种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Python count()函数实例详解

    Python count()函数实例详解

    count() 是Python的内置函数,可以「统计」字符串里指定「字符」或指定字符串出现的「次数」,这篇文章主要介绍了Python count()函数详解,需要的朋友可以参考下
    2023-07-07
  • Python基础教程之名称空间以及作用域

    Python基础教程之名称空间以及作用域

    变量是拥有匹配对象的名字(标识符),命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典,下面这篇文章主要给大家介绍了关于Python基础教程之名称空间以及作用域的相关资料,需要的朋友可以参考下
    2022-01-01

最新评论