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