python - 使用python显示来自多个文件夹的随机图像
问题描述
python v 3.7.3
matplotlib3.1.1
运行在Google colab
我有一个包含 101 个文件夹的数据集,每个文件夹大约有 750 张图像。我想从任何给定的文件夹中随机显示其中的 16 张图像。这些图像是这样组织的:
火车目录
- 文件夹1
- ---> 图像1
- ---> 图像2
- ---> 图像
- 文件夹2
- ---> 图像1
- ---> 图像2
等等。
我尝试创建遍历每个文件夹并选择随机图像 16 次 TOTAL(不是每个文件夹)的代码。
到目前为止,这是我的代码:
import random
from PIL import Image
for folder in os.listdir(train_folder):
for image in os.listdir(train_folder + '/' + folder):
img = os.path.join(train_folder, folder, image)
#print(img)
plt.figure(1, figsize=(15, 9))
plt.axis('off')
n = 0
for i in range(16):
n += 1
random_img = random.choice(img)
imgs = imread(random_img)
plt.subplot(4, 4, n)
axis('off')
plt.imshow(imgs)
plt.show()
这是错误:
FileNotFoundError Traceback (most recent call last)
<ipython-input-19-2f47ab853e7c> in <module>()
13 n += 1
14 random_img = random.choice(img)
---> 15 imgs = imread(random_img)
16 plt.subplot(4, 4, n)
17 #plt.subplots_adjust(hspace = 0.5, wspace = 0.5)
1 frames
/usr/local/lib/python3.6/dist-packages/PIL/Image.py in open(fp, mode)
2764
2765 if filename:
-> 2766 fp = builtins.open(filename, "rb")
2767 exclusive_fp = True
2768
FileNotFoundError: [Errno 2] No such file or directory: '6'
我不确定在哪里提出随机选择其中一张图像的论据。我还认为我使用的结构可能不是最有效的,因为它可能需要对文件夹进行多次迭代。最好只浏览一次文件夹,然后选择 16 张图像。在python中有没有一种有效的方法来做到这一点?我还不知道它的局限性。
解决方案
os.path.join 连接路径,但它没有列出您可以从中随机选择路径名称的列表。您还需要分离生成列表并从中随机选择。尝试类似:
import random
from PIL import Image
images = []
for folder in os.listdir(train_folder):
for image in os.listdir(train_folder + '/' + folder):
images.append(os.path.join(train_folder, folder, image))
plt.figure(1, figsize=(15, 9))
plt.axis('off')
n = 0
for i in range(16):
n += 1
random_img = random.choice(images)
imgs = imread(random_img)
plt.subplot(4, 4, n)
axis('off')
plt.imshow(imgs)
plt.show()
希望有帮助!
推荐阅读
- javascript - 无法在带有 Laravel 和 PHP 的 JavaScript 中填充包含 '(单引号,撇号)的数据的字段
- git - 将当前分支移动到不同的工作树
- python - 不断收到“自我未定义”错误,但缩进似乎很好
- angular - 在角度通用中使用动画
- python - 使用 beautifulsoup 获取文本。
- css - 如何将右图像浮动到一行内容下方
- angularjs - 期权来了,而不是 put
- php - 计算嵌套在文档中的子数组的数组长度并求和 - MongoDB / PHP
- java - Java 应用程序使用 for 循环和 if 语句检查字谜
- angular - 使用 *ngFor 渲染增量更新?