Отображение случайных изображений из нескольких папок с помощью python - PullRequest
1 голос
/ 28 февраля 2020

python v 3.7.3
matplotlib 3.1.1
, работающий на Google colab

У меня есть набор данных, содержащий 101 папку и около 750 изображений в папке. Я хотел бы случайным образом отобразить 16 из этих изображений из любой данной папки. Изображения организованы следующим образом:

Каталог поездов

  • folder1
  • ---> image1
  • ---> image2
  • ---> imagen

  • folder2
  • ---> image1
  • ---> image2

и т. Д.

Я попытался создать код, который перебирает каждую папку и выбирает случайное изображение 16 раз ИТОГО (не для каждой папки).

Вот мой код, таким образом far:

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'

Я не уверен, где представить аргумент для случайного выбора одного из изображений. Я также думаю, что структура, которую я использую, может быть не самой эффективной, поскольку может потребоваться несколько итераций по папкам. Было бы неплохо просто go просмотреть папки один раз и выбрать 16 изображений. Есть ли эффективный способ сделать это в python? Я пока не знаю его ограничений.

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Это одно из решений вашего вопроса, вы можете сослаться на него. Я надеюсь, что это может вам сильно помочь! Если у вас есть какие-либо вопросы, вы можете написать мне!

import random
from PIL import Image
import os

path = os.getcwd()+'\\'+"Question1"
dirs = os.listdir(path)
image_random_number = 16
for folder in os.listdir(path):
    image_lists = os.listdir(path+'\\'+folder)
    for i in range(image_random_number):
        index = random.randint(1,image_random_number)
        image = image_lists[index]
        img = os.path.join(path,folder,image)
        im = Image.open(img)
        im.show()
1 голос
/ 28 февраля 2020

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()

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...