因此,我尝试使用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次,并希望保存原始图像的所有版本。
答案 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()
变量即可。