Argparse输入和输出目录

时间:2018-08-03 17:06:03

标签: python argparse

因此,我尝试使用python的argparse从目录中获取图像,然后对其进行修改并将其存储在新目录中,但是遇到了麻烦。

例如说我有一个名为classes的目录,其中有50个不同的类,每个类具有100个不同的图像。

classes > {A(50), B(50), ...N(50)}

然后我应该对这些图像进行处理,然后将它们保存到新的不同目录classes_2

classes2 > {A'(200), B'(200),...N'(200)}

我希望能够指定一些内容

python filename.py --input classes/A --dest classes_2/A'

如何使用argparse来做到这一点。另外,我使用的是scipy imsave,但是每次都必须更改代码中的路径。

编辑:

好,谢谢@nosklo,现在的问题是我正在使用imgaug库进行图像增强,而我的代码是这样的:

假设我拥有所有需要的导入文件,例如cv2,imgaug,argparse,os,sys等。

parser = argparse.ArgumentParser()
parser.add_argument('--input', help = 'input directory', required = True)
parser.add_argument('--dest', help = 'destination directory', required = True)
args = ap.parse_args()

for filename in files:
    images = []
    image = cv.imread(filename)
    image_rgb = cv.cvtColor(image, cv.COLOR_BRG2RGB)
    images.append(image_rgb)

    #imgaug built-in functions
    seq = iaa.Sequential([ ... ])

    num_augs_per_image = 10

    # save images in format 001_07 
    # where 001 is the second image in your original data set 
    # and 07 is the 8th version of the 2nd image
    for i, image in enumerate(images):
        image_augs = seq.augment_images([image] * n_augs_per_image)
        for j, image_aug in enumerate(image_augs):
            result = os.path.join(args.dest, "%03d_%02d.jpg" % (i, j))
            with open(result, 'wb') as f:
                f.write(image_aug)

我也尝试了最后一部分:

for i, image in enumerate(images):
            image_augs = seq.augment_images([image] * n_augs_per_image)
                for j, image_aug in enumerate(image_augs):
                    misc.imsave(os.path.join("%03d_%02d.jpg" % (i, j)), image_aug)

但是,当我将文件python filename.py --input / path / classes / A --dest / path / classes / B调用时,没有得到任何保存在新目录中的图像。

例如,如果我在目录A中有5张图像,那么我希望在目录B中有50张图像,因为我已经将每个图像放大了10次,并希望保存原始图像的所有版本。

1 个答案:

答案 0 :(得分:0)

我会帮助argparse部分,因此您可以专注于必须对图像执行的“操作”:

import os
import argparse

parser = argparse.ArgumentParser(description='Process some images')
parser.add_argument('--input', help='the input directory', required=True)
parser.add_argument('--dest', help='the destination', required=True)

args = parser.parse_args()

for path, dirs, files in os.walk(args.input):
    for filename in files:
        fullname = os.path.join(path, filename)
        result, result_filename = do_something(fullname)
        result_fullname = os.path.join(args.dest, result_filename)
        with open(result_fullname, 'wb') as f:
            f.write(result)

这假设您的函数do_something将能够返回result和新的result_filename,这些新的--dest将用于将文件写入filename目录-如果您想要使用相同的文件名,只需使用interp()变量即可。