Как я могу повторить обработку изображений через каталог файлов изображений в подпапке в Python? - PullRequest
2 голосов
/ 03 марта 2012

Требуется помощь, в частности, в том, как соединить итеративный список (объявленный как fileListL), который динамически создается из последовательности файлов изображений в подкаталоге (слева) и циклически проходит до тех пор, пока не достигнет конца диапазона кадров. Весь сценарий работает так, как задумано, на одном кадре, но я не могу заставить его циклически проходить по нескольким кадрам. Идеи, мысли?

# this module runs within a root directory that contains one sub folder named 'left' and 15 sub folders expressed in the dirL as ('left/01','left/02, . . . .)
# each folder can have any number of sequential .jpg images in the format 'name.0000.jpg'

import os
import sys
import glob
import Image
from itertools import izip, count

# create Master List of files in Left Directories along with a count of files

global fileListL
fileListL = []
for root, dirs, files in os.walk(r'left/'):
    for file in files:
        if file.endswith('.jpg'):
                fileListL.append('left/'+file)
print fileListL

# Iterator
global inFrame
global outFrame
inFrame = 'left/test.0000.jpg' # testing temp needs dynamic variable, trying to use fileList L list to dynamically increment thru frames
outFrame = inFrame[5:-5]
crops = ((0, 0, 1920, 1080),(1920, 0, 3840, 1080), (3840, 0, 5760, 1080), (5760, 0, 7680, 1080), (7680, 0, 9600, 1080), (9600, 0, 11520, 1080), (11520, 0, 13440, 1080), (13440, 0, 15360, 1080), (15360, 0, 17280, 1080), (17280, 0, 19200, 1080), (19200, 0, 21120, 1080), (21120, 0, 23040, 1080), (23040, 0, 24960, 1080), (24960, 0, 26880, 1080), (26880, 0, 28800, 1080))
quads = ('01_', '02_', '03_', '04_', '05_', '06_', '07_', '08_', '09_', '10_', '11_', '12_', '13_', '14_', '15_')
dirL= ('left/01/', 'left/02/', 'left/03/', 'left/04/', 'left/05/', 'left/06/', 'left/07/', 'left/08/', 'left/09/', 'left/10/', 'left/11/', 'left/12/', 'left/13/', 'left/14/', 'left/15/')

for i in fileListL:
    for infile in glob.glob( os.path.join(inFrame) ):
        print "current file is: " + infile
        oL = Image.open(inFrame) # needs dynamic variable for frames
        for i, each_quad, each_frame, each_dirL in izip(count(), crops, quads, dirL):
            print i, each_quad, each_frame, each_dirL
            frame = oL.crop(((each_quad)))
            frame.save((each_dirL)+(each_frame)+(outFrame)+'.png')

1 Ответ

1 голос
/ 03 марта 2012

В вашем коде так много ошибок «копирования и вставки», что трудно понять его назначение.

  • вложенные циклы for, использующие одно и то же имя для переменной цикла (i).
  • os.path.join(inFrame) ожидает список, содержащий компоненты пути, inFrame представляется строкой
  • какова цель первого цикла for (for i in fileListL), похоже, что вы отбрасываете i.
  • и т. Д. ...

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

[обновление]

Похоже, ваш код может быть упрощен до чего-то вроде:

for i, file_name in enumerate(glob.glob('left/*.jpg')):
    out_frame = 'left/%02d/%s.png' % (i+1, file_name[5:-5])
    print "current input file is: '%s', output file is: %s" % (file_name, out_frame)
    img = Image.open(file_name)
    for i, crop in enumerate(crops):
        frame = img.crop(crop)
        frame.save(out_frame)

Это непроверенный код только для указания правильного направления.

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