Как использовать библиотеку подушек для рекурсивного доступа к файлам изображений в подкаталогах? - PullRequest
1 голос
/ 20 мая 2019

Я хочу обрезать и изменить размер нескольких изображений во многих подкаталогах. Код работает, если изображения находятся в одном каталоге, но не может прочитать из других каталогов.

Я пытался использовать модуль os.walk (). Он успешно перебирает файлы из всех подкаталогов, но функция Image.open () подушки не может получить доступ к изображениям и, таким образом, отображает ошибку: «изображение ..» не найдено.

import os
from PIL import Image

for dirpath, dirnames, files in os.walk('.'):
    for filename in files:
        t = filename.split(".")
        ext = t[-1]
        if ext in ["jpg"]:
            print(filename)
            coords = (500, 250, 810,720)
            image_obj = Image.open(filename)
            cropped_image = image_obj.crop(coords)
            resized_image =cropped_image.resize([227,227])
            # name = "./data2" + str(i) +".jpg"
            resized_image.save("new" + filename)

Я ожидаю, что код рекурсивно обрежет и изменит размеры изображений во всех подкаталогах. Произошла следующая ошибка.

frame0.jpg
Traceback (most recent call last):
  File "........./data2/cropitall.py", line 18, in <module>
    image_obj = Image.open(filename) #path of image to be cropped
  File "C:\Python36\lib\site-packages\PIL\Image.py", line 2652, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'frame0.jpg'

Process finished with exit code 1

1 Ответ

0 голосов
/ 20 мая 2019

Чтобы открыть изображение, вам нужен весь путь к файлу, а не только имя файла.Вместо

image_obj = Image.open(filename)

до

path = os.path.join(dirpath, filename)
image_obj = Image.open(path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...