Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们可以不使用PIL从目录将图像加载到python吗?还有什么其他方法?_Python_Image Processing_Python Imaging Library - Fatal编程技术网

我们可以不使用PIL从目录将图像加载到python吗?还有什么其他方法?

我们可以不使用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

我将编写一个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 = 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,:)这里我正在开发一个项目,需要编写一个脚本,通过同时加载一个大的图像列表来仔细考虑对内存的大量需求——考虑每次加载一个并在加载下一个之前处理它。