首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PIL进行批量图像处理?

使用PIL进行批量图像处理?
EN

Stack Overflow用户
提问于 2021-02-20 02:12:51
回答 1查看 445关注 0票数 0

我刚刚在一个项目中遇到了pythons PIL库,所以对这个库非常陌生。

我的简单程序从目录中导入一个图像,使用PIL应用所需的操作,然后将其保存到另一个文件夹中。

我的问题-我是否可以批量导入包含多个图像的目录,并在PIL中对该目录中的所有图像运行所需的操作?

EN

回答 1

Stack Overflow用户

发布于 2021-02-20 20:09:05

一般来说,当处理通常对内存要求很高的图像时,将数千张图像批量加载到内存中,然后处理它们,然后将它们全部写出,这不是最好的想法,因为您对计算机的RAM产生了巨大的需求,这可能会减慢它的速度。这会导致代码更像这样:

代码语言:javascript
复制
#!/usr/bin/env python3

import glob
from PIL import Image

def ProcessOne(f):
   print(f'Opening {f}')
   im = Image.open(f)
   ... process ...
   ... process ...

if __name__ == '__main__':

   # Create a list of files to process
   files = [f for f in glob.glob("*.jpg")]

   for f in files:
       ProcessOne(f)

此外,如果你正在对大量的图像进行同样的处理,那么使用Python的multiprocessing模块通常是一个合理的想法,因为Python本身不会使用所有那些你花了英特尔那么多钱买来的可爱的CPU核心,这是一个认真的考虑,因为CPU继续变得更胖(更多核心),而不是更高(更多GHz)。这导致代码更像这个例子,它几乎不会更难编写或阅读:

代码语言:javascript
复制
#!/usr/bin/env python3

import glob
from multiprocessing import Pool
from PIL import Image

def ProcessOne(f):
    im = Image.open(f)
    ... process ...


if __name__ == '__main__':
    # Create a pool of processes to check files
    p = Pool()

    # Create a list of files to process
    files = [f for f in glob.glob("*.jpg")]

    print(f'Files to process: {len(files)}')

    # Map the list of files to check onto the Pool
    p.map(ProcessOne, files)

另请注意,您可以使用ImageMagick简单地处理数百个文件,并将结果写入不同的目录。所以,假设你想要标准化整个JPEG目录的亮度级别,并将修改后的文件写到一个名为OUTPUT的目录中,你可以在终端中这样做:

代码语言:javascript
复制
mkdir -p OUTPUT
magick mogrify -path OUTPUT -auto-level *.jpg
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66282882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档