我刚刚在一个项目中遇到了pythons PIL库,所以对这个库非常陌生。
我的简单程序从目录中导入一个图像,使用PIL应用所需的操作,然后将其保存到另一个文件夹中。
我的问题-我是否可以批量导入包含多个图像的目录,并在PIL中对该目录中的所有图像运行所需的操作?
发布于 2021-02-20 20:09:05
一般来说,当处理通常对内存要求很高的图像时,将数千张图像批量加载到内存中,然后处理它们,然后将它们全部写出,这不是最好的想法,因为您对计算机的RAM产生了巨大的需求,这可能会减慢它的速度。这会导致代码更像这样:
#!/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)。这导致代码更像这个例子,它几乎不会更难编写或阅读:
#!/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的目录中,你可以在终端中这样做:
mkdir -p OUTPUT
magick mogrify -path OUTPUT -auto-level *.jpghttps://stackoverflow.com/questions/66282882
复制相似问题