首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Argparse输入和输出目录

Argparse输入和输出目录
EN

Stack Overflow用户
提问于 2018-08-04 01:06:03
回答 1查看 3.6K关注 0票数 1

所以我尝试使用python的argparse从一个目录中获取图像,修改它们并将它们存储在一个新的目录中,但是我遇到了麻烦。

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

代码语言:javascript
复制
classes > {A(50), B(50), ...N(50)}

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

代码语言:javascript
复制
classes2 > {A'(200), B'(200),...N'(200)}

我希望能够指定一些东西

代码语言:javascript
复制
python filename.py --input classes/A --dest classes_2/A'

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

编辑:

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

假设我有了所需的所有导入,cv2、imgaug、argparse、os、sys等。

代码语言:javascript
复制
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)

最后一部分我也试过了:

代码语言:javascript
复制
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 /path/classes/A --dest /path/classes/B时,我没有得到保存在新目录中的任何图像。

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

EN

回答 1

Stack Overflow用户

发布于 2018-08-04 01:15:54

我将帮助您完成argparse部分,这样您就可以专注于您必须对图像执行的“某些操作”:

代码语言:javascript
复制
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变量即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51677207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档