通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

如何批量读取图片python

如何批量读取图片python

在Python中批量读取图片的方法有多种,包括使用os库、glob库和图像处理库如PIL(Pillow)或OpenCV等。通过这些方法,可以快速高效地读取文件夹中的多张图片并进行处理。使用os库遍历目录、glob库模式匹配、结合PIL或OpenCV进行图像读取,是实现批量读取图片的有效方法。下面我们详细介绍如何使用这些工具和库实现这一过程。

一、使用OS库批量读取图片

os库是Python标准库的一部分,可以用来处理文件和目录。通过os.listdir()方法,我们可以列出指定目录下的所有文件,并结合文件名后缀判断,筛选出图片文件。

使用os库

  1. 遍历目录文件

    首先,使用os.listdir()方法列出目录中的所有文件,并通过循环遍历这些文件,使用字符串方法检查文件名后缀,判断是否为图片文件。常见的图片文件后缀包括.jpg.jpeg.png等。

    import os

    def load_images_from_folder(folder):

    images = []

    for filename in os.listdir(folder):

    if filename.endswith(".jpg") or filename.endswith(".png"):

    img = os.path.join(folder, filename)

    images.append(img)

    return images

  2. 读取图片

    读取图片可以使用PIL库的Image.open()方法或OpenCV库的cv2.imread()方法。下面是使用PIL读取图片的示例:

    from PIL import Image

    def load_and_show_images(folder):

    for filename in os.listdir(folder):

    if filename.endswith(".jpg") or filename.endswith(".png"):

    img = Image.open(os.path.join(folder, filename))

    img.show() # 显示图片

    使用OpenCV读取图片的示例:

    import cv2

    def load_and_show_images_cv(folder):

    for filename in os.listdir(folder):

    if filename.endswith(".jpg") or filename.endswith(".png"):

    img = cv2.imread(os.path.join(folder, filename))

    cv2.imshow('image', img) # 显示图片

    cv2.waitKey(0)

    cv2.destroyAllWindows()

二、使用GLOB库批量读取图片

glob库是Python标准库的一部分,支持使用通配符进行文件搜索。相比于osglob更简洁,可以直接通过模式匹配选择指定类型的文件。

使用glob库

  1. 使用通配符模式匹配

    使用glob.glob()方法结合通配符模式,可以快速获取指定类型的文件路径列表。例如,匹配所有.jpg.png文件:

    import glob

    def load_images_with_glob(folder):

    pattern = os.path.join(folder, "*.jpg")

    images = glob.glob(pattern)

    images.extend(glob.glob(os.path.join(folder, "*.png")))

    return images

  2. 读取图片

    在获取图片路径列表后,可以使用前面提到的PIL或OpenCV方法读取图片。

    from PIL import Image

    def load_and_show_images_with_glob(folder):

    images = load_images_with_glob(folder)

    for img_path in images:

    img = Image.open(img_path)

    img.show()

三、使用PIL批量读取图片

PIL(Python Imaging Library)是一个强大的图像处理库,Pillow是PIL的一个友好的分支,提供了更丰富的功能和更好的兼容性。

使用PIL

  1. 读取和处理图片

    使用PIL可以轻松读取、显示、保存和修改图片。除了基本的读取操作外,PIL还支持各种图像处理操作,如调整大小、旋转、滤镜等。

    from PIL import Image

    import os

    def process_images_with_pil(folder):

    for filename in os.listdir(folder):

    if filename.endswith(".jpg") or filename.endswith(".png"):

    img_path = os.path.join(folder, filename)

    img = Image.open(img_path)

    img = img.resize((100, 100)) # 调整大小

    img = img.rotate(45) # 旋转45度

    img.show()

  2. 保存处理后的图片

    处理后的图片可以使用img.save()方法进行保存,指定保存路径和文件格式。

    def save_processed_images(folder, output_folder):

    if not os.path.exists(output_folder):

    os.makedirs(output_folder)

    for filename in os.listdir(folder):

    if filename.endswith(".jpg") or filename.endswith(".png"):

    img_path = os.path.join(folder, filename)

    img = Image.open(img_path)

    img = img.resize((100, 100))

    img.save(os.path.join(output_folder, filename))

四、使用OpenCV批量读取图片

OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理功能。

使用OpenCV

  1. 读取和显示图片

    使用OpenCV的cv2.imread()方法读取图片,cv2.imshow()方法显示图片。

    import cv2

    import os

    def process_images_with_cv2(folder):

    for filename in os.listdir(folder):

    if filename.endswith(".jpg") or filename.endswith(".png"):

    img_path = os.path.join(folder, filename)

    img = cv2.imread(img_path)

    img = cv2.resize(img, (100, 100)) # 调整大小

    cv2.imshow('Processed Image', img)

    cv2.waitKey(0)

    cv2.destroyAllWindows()

  2. 保存处理后的图片

    使用cv2.imwrite()方法保存处理后的图片。

    def save_processed_images_cv2(folder, output_folder):

    if not os.path.exists(output_folder):

    os.makedirs(output_folder)

    for filename in os.listdir(folder):

    if filename.endswith(".jpg") or filename.endswith(".png"):

    img_path = os.path.join(folder, filename)

    img = cv2.imread(img_path)

    img = cv2.resize(img, (100, 100))

    cv2.imwrite(os.path.join(output_folder, filename), img)

通过以上方法,我们可以在Python中灵活地批量读取和处理图片。选择合适的库和方法,可以有效提高图像处理的效率和灵活性。无论是进行简单的批量读取,还是在此基础上进行更复杂的图像处理操作,掌握这些技巧都将为你的Python编程提供强大的支持。

相关问答FAQs:

**如何在Python中批量读取图片文件?

相关文章