1

我目前正在做一个项目,到目前为止,我已经生成了一个图像文件夹(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 上。

4

3 回答 3

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()
    # ...
于 2018-07-20T04:16:25.547 回答
0

使用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()
于 2022-01-14T12:05:38.443 回答
0

内置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: ...

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

(小字:print( list( map( ... ))),不是print( map( ... ))。)

于 2022-01-18T10:32:52.227 回答