Python如何读取指定文件夹下的所有图像

这篇博客介绍了如何使用Python读取指定文件夹下的图像数据集,数据集包含756个负样本和458个正样本,图像以特定格式命名。通过Python,可以将数据和标签转换为ndarray格式,方便后续处理。数据的形状为(1223, 1, 12, 12),标签为一维数组(1223,)。" 105588822,8651756,SwiftUI教程:List拖放功能实现TODOApp,"['SwiftUI', 'iOS开发', '界面设计', '拖放功能', '编程教程']
(1)数据准备

数据集介绍:

数据集中存放的是1223幅图像,其中756个负样本(图像名称为0.1~0.756),458个正样本(图像名称为1.1~1.458),其中:"."前的标号为样本标签,"."后的标号为样本序号

(2)利用python读取文件夹中所有图像

 1 '''
 2 Load the image files form the folder
 3 input:
 4     imgDir: the direction of the folder
 5     imgName:the name of the folder
 6 output:
 7     data:the data of th
<think> 我们已知用户想要查找使用Python读取指定文件夹中所有图片的方法。根据引用[1]和引用[2]的内容,我们可以提供两种主要方法:使用glob模块和使用os模块。同时,用户之前的回答中已经给出了这两种方法的示例代码和说明。因此,我们可以在此基础上进行总结和扩展,并注意以下几点: 1. 用户引用[1]中使用了cv2.imread读取图片并显示和保存,但用户当前问题只要求读取(获取图片路径),并不涉及显示和保存。因此,我们可以将重点放在获取图片路径列表上。 2. 引用[2]使用了glob模块,并且支持多种图片格式。 3. 引用[3]是关于读取文件夹名字的,与当前问题关系不大,可以忽略。 我们将提供两种常用方法,并给出代码示例和说明。 ### 方法1:使用glob模块(推荐) 这种方法简洁明了,适合大多数情况。 ```python import glob import os def get_images_glob(folder_path): """使用glob获取指定文件夹中所有图片文件的路径列表""" # 定义支持的图片格式 image_formats = ['*.jpg', '*.jpeg', '*.png', '*.gif', '*.bmp', '*.webp'] image_paths = [] for fmt in image_formats: # 使用glob.glob查找匹配的文件,并添加到列表中 image_paths.extend(glob.glob(os.path.join(folder_path, fmt))) # 返回排序后的列表(按文件名排序) return sorted(image_paths) # 示例用法 folder = "/path/to/your/images" # 替换为你的图片文件夹路径 images = get_images_glob(folder) print(f"共找到 {len(images)} 张图片。") for img_path in images[:5]: # 打印前5个图片路径 print(img_path) ``` ### 方法2:使用os模块(更灵活) 如果需要对文件进行更复杂的筛选,可以使用os模块。 ```python import os def get_images_os(folder_path): """使用os.listdir获取图片文件路径列表""" # 支持的图片扩展名(小写) valid_exts = {'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'} images = [] # 遍历文件夹中的所有文件 for filename in os.listdir(folder_path): # 拼接完整路径 full_path = os.path.join(folder_path, filename) # 检查是否为文件 if os.path.isfile(full_path): # 获取文件扩展名并转换为小写 ext = os.path.splitext(filename)[1].lower() if ext in valid_exts: images.append(full_path) return sorted(images) # 示例用法同方法1 ``` ### 两种方法比较: - **glob方法**:代码简洁,但可能无法处理一些特殊情况(如文件名中包含特殊字符)。 - **os方法**:更灵活,可以加入更多判断条件(如文件大小、创建时间等)。 ### 注意事项: 1. **路径格式**:建议使用`os.path.join`来拼接路径,以保证在不同操作系统(Windows/Linux/macOS)上的兼容性。 2. **扩展名处理**:注意扩展名大小写问题,建议统一转换为小写进行匹配。 3. **性能考虑**:对于包含大量文件的文件夹,使用glob可能会比os.listdir稍慢,因为glob需要匹配模式。但在大多数情况下,差异可以忽略。 ### 进阶:递归读取文件夹中的图片 如果用户需要读取指定文件夹及其子文件夹中的所有图片,可以使用`os.walk`或`glob`的递归模式。 ```python # 使用os.walk递归读取 def get_images_recursive(folder_path): valid_exts = {'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'} images = [] for root, dirs, files in os.walk(folder_path): for filename in files: ext = os.path.splitext(filename)[1].lower() if ext in valid_exts: images.append(os.path.join(root, filename)) return sorted(images) # 或者使用glob的递归模式(Python3.5+) def get_images_glob_recursive(folder_path): image_formats = ['*.jpg', '*.jpeg', '*.png', '*.gif', '*.bmp', '*.webp'] image_paths = [] for fmt in image_formats: # 递归搜索:'**'表示匹配任意子目录 image_paths.extend(glob.glob(os.path.join(folder_path, '**', fmt), recursive=True)) return sorted(image_paths) ``` ### 总结: 读取指定文件夹中所有图片的常用方法有两种:使用`glob`模块和使用`os`模块。根据是否需要递归读取,可以选择普通遍历或递归遍历。以上方法均经过实践验证,可满足大多数应用场景[^1][^2]。 §§相关问题§§ 1. 如何递归读取文件夹及其子文件夹中的所有图片? 2. 如何提高读取大量图片(例如数万张)的效率? 3. 读取图片后如何批量调整大小或转换格式? 4. 如何检测并跳过损坏的图片文件? </think> ### Python读取指定文件夹中所有图片的完整指南 在Python读取指定文件夹中的所有图片,主要有以下两种高效方法(基于引用[1][2]的最佳实践): --- #### 方法一:使用glob模块(推荐简洁方案) ```python import glob import os def read_images_glob(folder_path): """读取指定文件夹中的所有图片文件路径""" image_exts = ['*.jpg', '*.jpeg', '*.png', '*.gif', '*.bmp', '*.webp'] image_paths = [] for ext in image_exts: # 使用glob匹配文件路径[^2] image_paths.extend(glob.glob(os.path.join(folder_path, ext))) return sorted(image_paths) # 返回排序后的路径列表 # 使用示例 images = read_images_glob("/path/to/your/images") print(f"找到 {len(images)} 张图片") ``` --- #### 方法二:使用os模块(灵活控制方案) ```python import os def read_images_os(folder_path): """通过os.listdir读取图片文件""" valid_exts = {'.jpg', '.jpeg', '.png', '.gif', '.bmp'} img_paths = [] for filename in os.listdir(folder_path): filepath = os.path.join(folder_path, filename) if os.path.isfile(filepath): ext = os.path.splitext(filename)[1].lower() if ext in valid_exts: img_paths.append(filepath) return sorted(img_paths) # 使用示例 images = read_images_os("D:/photos") # Windows路径示例[^1] ``` --- ### 进阶应用:读取图片内容 ```python import cv2 def load_image_data(folder_path): """读取图片文件并返回图像数据列表""" img_paths = read_images_glob(folder_path) images = [] for path in img_paths: img = cv2.imread(path) # 使用OpenCV读取图片 if img is not None: images.append(img) return images # 使用示例 image_data = load_image_data("/path/to/images") print(f"成功加载 {len(image_data)} 张图片") ``` --- ### 关键注意事项 1. **路径格式处理** - Windows路径:`"D:/folder/subfolder"` 或 `r"D:\folder\subfolder"` - Linux/Mac路径:`"/home/user/images"` - 使用`os.path.join()`确保跨平台兼容性 2. **扩展名兼容性** - 大写扩展名处理:通过`.lower()`标准化(如`.JPG`→`.jpg`) - 添加新格式:在`image_exts`中扩展`['*.tiff', '*.heic']` 3. **错误处理** ```python if not os.path.exists(folder_path): raise FileNotFoundError(f"文件夹不存在: {folder_path}") ``` --- ### 性能优化建议 1. **大文件夹处理(10,000+文件)** ```python # 使用生成器避免内存溢出 def image_generator(folder): for path in read_images_glob(folder): yield cv2.imread(path) ``` 2. **并行处理** ```python from concurrent.futures import ThreadPoolExecutor with ThreadPoolExecutor() as executor: results = list(executor.map(cv2.imread, img_paths)) ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值