Python 遍历图像目录

Python Globbing a directory of images

我目前正在做一个项目,到目前为止我已经生成了一个图像文件夹(png 格式),我需要在其中遍历每个图像并使用 PIL 对其进行一些操作。

我通过手动将文件路径链接到脚本中使操作正常工作。 要遍历我尝试使用以下

的每张图片
frames = glob.glob("*.png")

但这会产生一个文件名列表作为字符串。

PIL 需要加载图像的文件路径,以便进一步使用

filename = input("file path:")
image = Image.open(filename)
callimage = image.load()

如何转换 glob.glob 列表中的字符串并将其用作 Image.open 方法的参数?

感谢您的反馈!

我在 python 3.6.1 如果有任何相关性的话。

os 包的解决方案:

import os

source_path = "my_path"

image_files = [os.path.join(base_path, f) for f in files for base_path, _, files in os.walk(source_path) if f.endswith(".png")]

for filepath in image_files:
    callimage = Image.open(filepath).load()
    # ...

使用glob的解决方案:

import glob

source_path = "my_path"

image_files = [source_path + '/' + f for f in glob.glob('*.png')]

for filepath in image_files:
    callimage = Image.open(filepath).load()
    # ...

使用 pathlib 库而不是 glob.glob() 这样您就不必担心构建文件的路径。 Image.open() 方法也接受一个 pathlib.Path 对象作为第一个参数。

from pathlib import Path

frames = Path('path_to_folder')

for file in frames.glob('*.png'):
    callimage = Image.open(file).load()

内置的 map() 是做某事的通用方法,在本例中为 load,对于事物列表:
map( func, [a, b, c ...] ) 大致是
[func(a), func(b), func(c) ...]。 所以

def loadit( png ): 
    return Image.open( png ).load()

images = map( loadit, glob( "*.png" ))
for image in images: ...

这个functional 风格值得学习; 它非常适合纸上的流程图​​。

(细则:print( list( map( ... ))),而非 print( map( ... ))。)