从目录中导入图像(Python)到列表或字典

64

我正在尝试导入一个目录中的所有图片(已知目录位置)。

path = /home/user/mydirectory

我已经知道了如何找到目录的长度。

但我不确定如何使用PIL/Pillow将图片导入列表或字典,以便它们可以被正确地操作。


2
你可能会觉得这个链接有帮助:https://dev59.com/2XA75IYBdhLWcg3wm6Qj这是一个用于列出目录中所有文件的方法,然后你可以调用每个文件的读取图像函数。 - Mike
1
Mike 给了你一个找到所有文件的解决方案 - 既然你有所有文件名,你可以打开它们 - 有时候你需要思考! - Tony Suffolk 66
1
嘿,查尔斯,你在这里还很新,我也是...我学到的一件事是,如果人们帮助你越容易,你就会得到更多反馈。不知道如何编程并提出问题是可以的(在我看来),但通过提供甚至是有错误的代码版本来展示努力,将使人们更愿意帮助。我们喜欢可以修复的示例,而不是泛泛而谈!我认为对一个新用户进行负投票有点刻薄,所以不要灰心丧气! - user1269942
1
@AndrewBarber:尊重您作为主持人的角色,我认为问题很清楚(不应该被搁置)- 鉴于该问题有两个答案(做类似的事情),其中一个已被接受。 - Tony Suffolk 66
这个问题并不是非常清晰,而且解决方案只能在一定程度上解决问题。 - GhostCat
2个回答

100

我建议先使用glob:

from PIL import Image
import glob
image_list = []
for filename in glob.glob('yourpath/*.gif'): #assuming gif
    im=Image.open(filename)
    image_list.append(im)

然后您需要根据图像列表(image_list)执行必要的操作。


7
image_list = map(Image.open, glob('your/path/*.gif')) - jfs
2
比我的解决方案更好(正确使用glob),但是这更难扩展到其他图像类型 - 除非您想要一个更复杂的正则表达式。 - Tony Suffolk 66
3
@J.F.Sebastian image_list = [Image.open(item) for i in [glob.glob('your/path/*.%s' % ext) for ext in ["jpg","gif","png","tga"]] for item in i] ;) - user1269942
2
还有一件事需要注意...有时我要处理数千或数万张图像,简单地将它们全部放入列表中是愚蠢的。如果我使用for循环进行迭代,就可以更容易地将它们分成批次并在我的RAM限制内操作。 - user1269942
有没有办法将它们作为输出加载到Jupyter Notebook中?我使用了'image.show()`,但它只会使用默认应用程序打开图像。 - Bowen Liu
显示剩余3条评论

46
from PIL import Image
import os, os.path

imgs = []
path = "/home/tony/pictures"
valid_images = [".jpg",".gif",".png",".tga"]
for f in os.listdir(path):
    ext = os.path.splitext(f)[1]
    if ext.lower() not in valid_images:
        continue
    imgs.append(Image.open(os.path.join(path,f)))
   

@J.F.Sebastian - 感谢您的更正 - 我很高兴您能进行这些编辑 :-) - Tony Suffolk 66
另一种测试方法是:if f.lower().endswith(valid_images): append(在这种情况下,valid_images 应该是一个元组)。 - jfs
@J.F.Sebastian:在使用endswith方面是正确的,但我认为在测试文件扩展名时,使用splitext然后进行比较会更好一些 - 这样更加明确。 - Tony Suffolk 66
1
与检查是否为有效图像相关的内容:https://dev59.com/zXNA5IYBdhLWcg3wn_U1 - lucidbrot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接