写程序可以自动读取每个子目录下的图片,每读一张图片生成一个列表 [图片x,标签]
时间: 2023-05-08 18:00:22 浏览: 200
写程序可以通过递归的方式自动读取每个子目录下的图片,主要步骤如下:
1.定义一个列表用于存储所有图片的信息,每个元素采用[图片x,标签]的格式。其中图片x代表图片的路径,标签代表该图片所属的分类或类别,可以通过文件夹名称或者文件名前缀来表示。
2.遍历根目录下的所有子目录,可以使用os.listdir()函数获取当前目录下的所有文件和文件夹。
3.针对每个子目录,使用os.path.isdir()函数判断是否是一个目录,并进行进一步的处理。
4.如果是目录,则递归调用自身,处理该子目录下的所有子目录和图片,返回一个列表。
5.如果是图片,则将该图片的路径和标签添加到列表中。
6.递归处理完所有子目录和子文件后,返回最终的列表。
完成上述步骤后,即可获得每个子目录下的所有图片信息,方便后续的处理和分析。
相关问题
写程序可以自动读取每个子目录下的图片,每读一张图片生成一个列表 [图片x,标签],这里标签为图片所在目录的名字,如:0,1,2,3,... 将每次生成的列表作为一个元素加入总图片列表,最终把该总列表存入磁盘文件中。
可以使用Python中的os和PIL库来实现这个功能。具体实现步骤如下:
1. 使用os库遍历每个子目录,获取图片文件的路径。
2. 使用PIL库打开每个图片文件,获取图片数据和标签。
3. 将图片数据和标签组成一个元组,加入到一个列表中。
4. 遍历完所有图片后,将该列表加入到总图片列表中。
5. 将总图片列表存入磁盘文件中,可以使用pickle库来实现。
下面是示例代码:
```python
import os
from PIL import Image
import pickle
# 遍历目录,获取所有图片文件的路径
def get_image_paths(root_dir):
image_paths = []
for dirpath, dirnames, filenames in os.walk(root_dir):
for filename in filenames:
if filename.endswith('.jpg') or filename.endswith('.png'):
image_path = os.path.join(dirpath, filename)
image_paths.append(image_path)
return image_paths
# 读取图片数据和标签
def read_image(image_path):
with Image.open(image_path) as img:
image_data = img.tobytes()
label = os.path.basename(os.path.dirname(image_path))
return (image_data, label)
# 生成图片列表
def generate_image_list(root_dir):
image_list = []
image_paths = get_image_paths(root_dir)
for image_path in image_paths:
image_data, label = read_image(image_path)
image_list.append((image_data, label))
return image_list
# 存储图片列表到磁盘文件
def save_image_list(image_list, file_path):
with open(file_path, 'wb') as f:
pickle.dump(image_list, f)
# 测试代码
if __name__ == '__main__':
root_dir = 'image_dir'
image_list = generate_image_list(root_dir)
save_image_list(image_list, 'image_list.pkl')
```
其中,root_dir为图片所在的根目录,可以根据实际情况修改。运行该代码后,会在当前目录下生成一个名为image_list.pkl的文件,其中存储了所有图片的数据和标签。
浏览指定目录下的各个子目录,如 ./imgs /1 /2 /3 每个子目录下有对应数字的图片。 写程序可以自动读取每个子目录下的图片,每读一张图片生成一个列表 [图片x,标签],这里标签为图片所在目录的名字,如:0,1,2,3,... 将每次生成的列表作为一个元素加入总图片列表,最终把该总列表存入磁盘文件中。
可以使用Python的os和PIL库来实现这个功能。具体代码如下:
```python
import os
from PIL import Image
# 指定目录
dir_path = './imgs'
# 存储所有图片的列表
img_list = []
# 遍历目录下的所有子目录
for subdir in os.listdir(dir_path):
subdir_path = os.path.join(dir_path, subdir)
# 如果是目录
if os.path.isdir(subdir_path):
# 遍历子目录下的所有图片
for img_name in os.listdir(subdir_path):
img_path = os.path.join(subdir_path, img_name)
# 如果是图片文件
if os.path.isfile(img_path) and img_name.endswith('.jpg'):
# 打开图片并获取标签
img = Image.open(img_path)
label = subdir
# 将图片和标签加入列表
img_list.append([img, label])
# 将总列表存入磁盘文件中
with open('img_list.txt', 'w') as f:
for img, label in img_list:
f.write(label + '\t' + img.filename + '\n')
```
这段代码会遍历指定目录下的所有子目录,读取每个子目录下的图片,并将每张图片和其所在目录的名字作为一个元素加入总图片列表。最终,将总列表存入磁盘文件中。
阅读全文