我们可以不使用PIL从目录将图像加载到python吗?还有什么其他方法?
我将编写一个python脚本,用于从目录加载图像并调整其大小,因此当我从目录加载图像时,我尝试了这两种方法 使用PIL:我们可以不使用PIL从目录将图像加载到python吗?还有什么其他方法?,python,image-processing,python-imaging-library,Python,Image Processing,Python Imaging Library,我将编写一个python脚本,用于从目录加载图像并调整其大小,因此当我从目录加载图像时,我尝试了这两种方法 使用PIL: from os import listdir from PIL import Image as PImage import split_folders import os, os.path #imgs.append(Image.open(os.path.join(path,image)) def loadImages(path): imagesList = list
from os import listdir
from PIL import Image as PImage
import split_folders
import os, os.path
#imgs.append(Image.open(os.path.join(path,image))
def loadImages(path):
imagesList = listdir(path)
loadedImages = []
for image in imagesList:
with open(os.path.join(path, image), 'rb') as i:
img = PImage.open(i)
loadedImages.append(img)
return loadedImages
path = "./Inputs/"
imgs = loadImages(path)
for img in imgs:
print(img)
不使用PIL:
import os
import numpy as np
import split_folders
def get_files_with_ext(path):
file_list = []
for file in os.listdir(path):
file_path = os.path.join(path, file)
if file_path.endswith('png'):
file_list.append(file_path)
if file_path.endswith('jpg'):
file_list.append(file_path)
return file_list
imgs = get_files_with_ext("./Inputs")
for img in imgs:
print(img)
两者都相同吗?在第一个示例中,您创建了一个列表
loadedImages=[]
,在该列表中附加一个img
,它是PImage.open(i)
,它是一个Image
或PImage
对象,根据。在第二个示例中,创建一个文件列表
,然后将文件路径
附加到该列表中
第一个列表包含已打开(但尚未卸载)的图像对象。此对象可用于直接加载和操作图像
在第二个代码段中,您有一个表示文件路径的字符串列表。在执行任何其他操作之前,必须首先将其作为图像对象加载。但是,第二种方法可以用作聚合特定类型文件的路径的通用方法,您可以随后加载和操作这些文件
您不需要枕头来打开文件。您可以只打开().read()文件,但随后会得到一个字符串,该字符串将图像表示为ByTestStream。加载文件后,您希望如何处理这些文件?如果涉及图像处理,那么使用枕头加载图像是合理的。哪一个更好@桑巴尔米尼,都是,都不是。这是你下一步想做的,决定了哪一个更好。在运行这两个代码段之后,您仍然只有一个对图像的引用列表。输出看起来一样吗?您实际上想做什么?使用终端中的ImageMagick,您可以将当前目录中的所有JPEG图像调整为最大640x480像素,使用
magick mogrify-resize 640x480*.jpg
无需代码。我知道@Mark,:)这里我正在开发一个项目,需要编写一个脚本,通过同时加载一个大的图像列表来仔细考虑对内存的大量需求——考虑每次加载一个并在加载下一个之前处理它。