python 对文件夹下各文件图片的处理

本人 在阅读facenet-master项目时 ,看到一段代码是对文件下各文件图片进行处理,觉得还不错由此记录下来。处理的内容如下所示:

  

代码 如下 :

import argparse
import os
import random
import sys
from PIL import Image
from scipy import misc


class ImageClass():
    def __init__(self,name,image_paths):
        self.name=name
        self.image_paths=image_paths
    def __str__(self):
        return self.name+","+str(len(self.image_paths))+'images'
    def __len__(self):
        return  len(self.image_paths)


def get_image_paths(facedir):
    image_paths=[]
    if os.path.isdir(facedir):
        images=os.listdir(facedir)
        image_paths=[os.path.join(facedir,img) for img in images]
    return image_paths


def get_dataset(path,has_class_direcories=True):
    dataset=[]
    path_exp=os.path.expanduser(path)
    classes =[path for path in os.listdir(path)\
              if os.path.isdir(os.path.join(path_exp,path))]
    classes.sort()
    nrod_classes=len(classes)
    for i in range(nrod_classes):
        class_name=classes[i]
        facedir=os.path.join(path_exp,class_name)
        image_paths=get_image_paths(facedir)
        dataset.append(ImageClass(class_name,image_paths))
    return dataset

def main(args):
    output_dir=os.path.expanduser(args.output_dir)
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    dataset=get_dataset(args.input_dir)

    for cls in dataset:
        output_class_dir=os.path.join(output_dir,cls.name)
        if not os.path.exists(output_class_dir):
            os.makedirs(output_class_dir)
            # if args.random_order:
            #     random.shuffle(cls.image_paths)
        for image_path in cls.image_paths:
            filename=os.path.splitext(os.path.split(image_path)[1])[0]
            output_filename=os.path.join(output_class_dir,filename+'.png')
            print(image_path)
            if not os.path.exists(output_filename):
                try :
                    # img=misc.imread(image_path)
                    # filename_base, file_extension=os.path.splitext(output_filename)
                    # output_filename_n="{}{}".format(filename_base,file_extension)
                    # # misc.imsave(output_filename_n,img)
                    img = Image.open(image_path).convert('LA')
                    filename_base, file_extension=os.path.splitext(output_filename)
                    output_filename_n = "{}{}".format(filename_base, file_extension)
                    img.save(output_filename_n)
                except (IOError,ValueError,IndexError) as e:
                    errorMassage='{}:{}'.format(image_path,e)
                    print(errorMassage)

def parse_arguments(argv):
    parser=argparse.ArgumentParser()
    parser.add_argument('input_dir',type=str,help='Director with unaligned images.',default="/dataset")
    parser.add_argument('output_dir',type=str,help='Directory with aligend face image',default='/new_dataset')

    return parser.parse_args(argv)
if __name__=='__main__':
    main(parse_arguments(sys.argv[1:]))

我用的是win7 ,Pycharm。 运行以上代码时需要 在 Edit Configurations 的 Parameters 输入input_dir 和 output_dir的值 我的dataset在同目录下,所以输入的是 dataset 和new_dataset  

linux 下好像是输入/dataset 和 /new_dataset 

我两个参数都用了 default ,照理来说是 不需要输入这两个 参数的 , 但是还是需要,没道理呀。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值