python处理数据集大小、分割训练集、测试集、验证集、label标签



"""Script to prepare resized images/labels for LPD."""


from __future__ import absolute_import
from __future__ import division
from __future__ import print_function


import argparse
import os
import cv2
from PIL import Image


def parse_args(args=None):
    """parse the arguments."""
    parser = argparse.ArgumentParser(description='Prepare resized images/labels dataset for LPD')


    parser.add_argument(
        "--input_dir",
        type=str,
        required=True,
        help="Input directory to OpenALPR's benchmark end2end us license plates."
    )


    parser.add_argument(
        "--output_dir",
        type=str,
        required=True,
        help="Ouput directory to resized images/labels."
    )


    parser.add_argument(
        "--target_width",
        type=int,
        required=True,
        help="target width for resized images/labels."
    )


    parser.add_argument(
        "--target_height",
        type=int,
        required=True,
        help="target height for resized images/labels."
    )
    return parser.parse_args(args)




def prepare_data(input_dir, img_list, output_dir, output_size):
    """Crop the license plates from the orginal images."""


    w, h = output_size


    target_img_path = os.path.join(output_dir, "image")
    target_label_path = os.path.join(output_dir, "label")


    if not os.path.exists(target_img_path):
        os.makedirs(target_img_path)


    if not os.path.exists(target_label_path):
        os.makedirs(target_label_path)


    for img_name in img_list:
        img_path = os.path.join(input_dir, img_name)
        label_path = os.path.join(input_dir,
                                  img_name.split(".")[0] + ".txt")
        print("Resizing {} and its label".format(img_path))


        # resize labels
        img = cv2.imread(img_path)
        (height, width, _) = img.shape
        ratio_w = float(float(w)/float(width) )
        ratio_h = float(float(h)/float(height) )


        with open(label_path, "r") as f:
            label_lines = f.readlines()
            assert len(label_lines) == 1
            label_items = label_lines[0].split()


        assert img_name == label_items[0]
        xmin = int(label_items[1])
        ymin = int(label_items[2])
        width = int(label_items[3])
        xmax = xmin + width
        height = int(label_items[4])
        ymax = ymin + height




        x1 = float(xmin) * ratio_w
        y1 = float(ymin) * ratio_h
        x2 = float(xmax) * ratio_w
        y2 = float(ymax) * ratio_h




        with open(os.path.join(target_label_path,
                               img_name.split(".")[0] + ".txt"), "w") as f:
            f.write("lpd 0.0 0 0.0 {:.2f} {:.2f} {:.2f} {:.2f} 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n".format(x1, y1, x2, y2))


        # resize images
        image = Image.open(img_path)
        scale_image = image.resize(output_size, Image.ANTIALIAS)
        scale_image.save(os.path.join(target_img_path, img_name))


def main(args=None):
    """Main function for data preparation."""


    args = parse_args(args)


    w = args.target_width
    h = args.target_height
    output_size = (w,h)


    img_files = []
    for file_name in os.listdir(args.input_dir):
        if file_name.split(".")[-1] == "jpg":
            img_files.append(file_name)


    image_dir = os.path.join(args.output_dir, "data")


    prepare_data(args.input_dir, img_files, image_dir, output_size)
 
    print("\nDone. Resized images/labels are saved at {} folder".format(args.output_dir))




if __name__ == "__main__":
    main()

改变图片大小(1)

import os
import cv2


def resize_img(DATADIR, img_size):
    w = img_size[0]
    h = img_size[1]
    '''设置目标像素大小,此处设为300'''
    path = os.path.join(DATADIR)
    # 返回path路径下所有文件的名字,以及文件夹的名字,
    img_list = os.listdir(path)

    for i in img_list:
        if i.endswith('.jpg'):
            # 调用cv2.imread读入图片,读入格式为IMREAD_COLOR
            img_array = cv2.imread((path + '/' + i), cv2.IMREAD_COLOR)
            # 调用cv2.resize函数resize图片
            new_array = cv2.resize(img_array, (w, h), interpolation=cv2.INTER_CUBIC)
            img_name = str(i)
            '''生成图片存储的目标路径'''
            save_path = 'D:/spec/masks/train/'
            if os.path.exists(save_path):
                print(i)
                '''调用cv.2的imwrite函数保存图片'''
                save_img = save_path + img_name
                cv2.imwrite(save_img, new_array)
            else:
                os.mkdir(save_path)
                save_img = save_path + img_name
                cv2.imwrite(save_img, new_array)


if __name__ == '__main__':
    # 设置图片路径
    DATADIR = "D:/data/masks/train"
    #data_k = "yuantu_resize/"
    # 需要修改的新的尺寸
    img_size = [320, 320]
    #resize_img(DATADIR, data_k, img_size)
    resize_img(DATADIR, img_size)


改变图片大小(方法二)

# 批量修改尺寸
import os
from PIL import Image

dir_img = "D:/data/masks/val/"
dir_save = "D:/spec/masks/val/"
size = (320, 320)

# 获取目录下所有图片名
list_temp = os.listdir(dir_img)
list_img = list_temp[1:]  # 因为列表中第0项为Mac OS X操作系统所创造的隐藏文件  .DS_Store,所以从第一项开始取

# 获得路径、打开要修改的图片
for img_name in list_img:
    img_path = dir_img + img_name
    old_image = Image.open(img_path)
    save_path = dir_save + img_name

    # 保存修改尺寸后的图片
    old_image.resize(size, Image.ANTIALIAS).save(save_path)
print("Done!")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值