Python 批量读取文件夹中图像

两种方法

一、用PIL库

import os
from PIL import Image


def read_images(folder_path):
    images = []
    for filename in os.listdir(folder_path):
        if filename.endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tif', '.tiff')):
            img_path = os.path.join(folder_path, filename)
            image = Image.open(img_path)
            images.append(image)
    return images


# 使用方法
folder_path = './aa'
images = read_images(folder_path)

二、用opencv库

import cv2
import os


def read_images(folder_path):
    images = []
    for filename in os.listdir(folder_path):
        if filename.endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tif', '.tiff')):
            img_path = os.path.join(folder_path, filename)
            image = cv2.imread(img_path)

            images.append(image)
    return images

# 使用方法同上
# 使用方法
folder_path = './aa'
images = read_images(folder_path)

三、说明opencv和PIL的不同、路径名含中文的处理

1.使用opencv和PIL读取图像的是不同的:使用opencv读取图像之后是BGR格式的,使用PIL读取图像之后是RGB格式的。

2.该代码可以批量读取文件夹中的图片,并逐一显示,图片名可以含中文。

图片名可含中文这一点对应代码为:image = cv2.imdecode(np.fromfile(filepath, dtype=np.uint8), -1)

cv2.imdecode()函数从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式。

代码:

import cv2
import os
import glob
import numpy as np
def batch_imread_with_opencv(folder_path, extensions=['*.jpg', '*.png']):
    """
    使用OpenCV批量读取文件夹中的图片。

    :param folder_path: 文件夹路径
    :param extensions: 要读取的图片文件扩展名列表,例如 ['*.jpg', '*.png']
    :return: 图片列表(NumPy数组形式)
    """
    images = []
    for ext in extensions:
        # 使用glob模块查找所有匹配扩展名的文件
        for filepath in glob.glob(os.path.join(folder_path, ext)):
            # 读取图片
            #image = cv2.imread(filepath)
            image = cv2.imdecode(np.fromfile(filepath, dtype=np.uint8), -1)

            # 检查图片是否正确读取
            if image is not None:
                images.append(image)
    return images

# 使用方法
folder_path = './aa'  # 替换为你的图片文件夹路径
images = batch_imread_with_opencv(folder_path)

# 输出读取的图片数量
print(f"Loaded {len(images)} images from {folder_path}")

# 如果你需要处理这些图片,你可以在这里进行
# 例如,遍历所有图片并显示它们
for i, image in enumerate(images):
    cv2.imshow(f'Image {i+1}', image)
    cv2.waitKey(0)  # 等待用户按键
    cv2.destroyAllWindows()  # 关闭所有窗口

文件夹图像名:

四、路径名含中文的处理-更简单的方法

在代码开头处加上:


#coding=utf-8

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值