Python图像处理项目中批量文件处理的操作步骤【教程】

舞夢輝影
发布: 2025-12-12 11:46:03
原创
626人浏览过
批量处理图像需用pathlib递归扫描常见格式文件,配合PIL安全缩放并保存至独立输出目录,加try-except防中断、tqdm显进度、multiprocessing提效,确保源数据不被覆盖。

python图像处理项目中批量文件处理的操作步骤【教程】

批量处理图像文件在Python项目中很常见,比如统一调整尺寸、批量转格式、加水印或提取特征。核心是用好osglobpathlib遍历文件,再配合PIL(Pillow)或OpenCV做具体操作。关键不是写死单个路径,而是构建可复用的路径扫描+任务执行流程。

准备环境与基础依赖

确保已安装必要库:

  • pip install pillow(推荐用于常规图像读写、缩放、格式转换)
  • 如需处理视频帧或高级计算机视觉任务,再加pip install opencv-python
  • pathlib更现代简洁(Python 3.4+ 内置,无需额外安装)

安全地批量读取指定类型图像文件

别用os.listdir()硬过滤,容易漏掉子目录或误读隐藏文件。推荐用pathlib.Path递归匹配:

from pathlib import Path
<p>img_dir = Path("input_images")</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/00968c3c2c15" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">Python免费学习笔记(深入)</a>”;</p><h1>支持通配符,自动忽略大小写(如 .JPG 和 .jpg 都命中)</h1><p>image_paths = list(img_dir.rglob("<em>.[jJ][pP][gG]")) + \
list(img_dir.rglob("</em>.[pP][nN][gG]")) + \
list(img_dir.rglob("*.[tT][iI][fF]"))</p><h1>或更简洁地用 casefold 处理后缀</h1><p>image_paths = [p for p in img_dir.rglob("<em>.</em>") 
if p.suffix.casefold() in {".jpg", ".jpeg", ".png", ".tiff", ".bmp"}]
登录后复制

这样能覆盖常见格式,也便于后续扩展。

NNiji·Journey
NNiji·Journey

二次元风格绘画生成器,由 Spellbrush 与 Midjourney 共同设计开发

NNiji·Journey 61
查看详情 NNiji·Journey

逐个处理并保存到新目录(不覆盖原图)

批量操作务必避免覆盖原始数据。建议按“输入→处理→输出”分离路径,并自动创建目标文件夹:

from PIL import Image
<p>output_dir = Path("resized_images")
output_dir.mkdir(exist_ok=True)  # 确保输出目录存在</p><p>for img_path in image_paths:
try:
with Image.open(img_path) as im:</p><h1>示例:等比缩放到最大边为800像素</h1><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">        im.thumbnail((800, 800), Image.Resampling.LANCZOS)
        # 保存时保持原格式,输出名不变,仅改路径
        save_path = output_dir / img_path.name
        # PNG保留透明通道,JPG转RGB避免报错
        if save_path.suffix.lower() == ".png":
            im.save(save_path)
        else:
            if im.mode in ("RGBA", "LA", "P"):
                im = im.convert("RGB")
            im.save(save_path, quality=95)
except Exception as e:
    print(f"跳过 {img_path.name}:{e}")</code>
登录后复制

try...except防止某张图损坏导致整个流程中断。

进阶技巧:加进度提示与并行加速

处理几百张以上图片时,加进度条提升体验;CPU密集型任务(如滤镜、重采样)可用multiprocessing提速:

  • tqdm显示进度:pip install tqdm,然后在循环前加for img_path in tqdm(image_paths, desc="处理中"):
  • 并行处理示例(适合多核CPU):from multiprocessing import Pool,把单图处理逻辑封装成函数,再用pool.map(process_one_image, image_paths)
  • 注意:PIL图像对象不能直接跨进程传递,建议只传文件路径,每个子进程自己打开和保存

基本上就这些。核心是路径管理清晰、错误有兜底、输出不污染源数据。实际项目中再根据需求叠加旋转、裁剪、批量重命名或写入EXIF等操作即可。

以上就是Python图像处理项目中批量文件处理的操作步骤【教程】的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号