任意角度旋转图像

本文通过旋转原始样本的方式,来扩大样本量。

文件夹结构

类似以下结构:

- your_folder
    - samples
        - 0
            0_ (1).jpg
            0_ (2).jpg
            ...
        - 1
            1_ (1).jpg
            1_ (2).jpg
            ...
    - data
    preprocess_data.py

开发语言和库


  • Python
  • Pillow

pip install Pillow

如何使用

直接在your_folder 目录下,运行以下python脚本,就可以自动旋转samples子文件夹内所有图像。

# -*- encoding:utf-8 -*-

import os
from PIL import Image


def preprocess_img(img_path, dst_sub_path, pfix):
    if not os.path.isfile(img_path):
        print("The input path for image file is invalid.")
        return
    if not os.path.isdir(dst_sub_path):
        print("The output path is invalid")
        return
    im = Image.open(img_path)
    rotates = range(0, 361, 15)
    for idx, v in enumerate(rotates):
        dst_im = im.rotate(v, 0, 1)
        dst_file_path = os.path.join(dst_sub_path, str(pfix + idx) + ".jpg")
        dst_im.save(dst_file_path)
    return pfix + len(rotates)


def main(src_path, dst_path):
    """
    main entry
    """
    if not os.path.isdir(src_path):
        print("The input path is invalid.")
        return
    if not os.path.isdir(dst_path):
        print("The output path is invalid.")
        return

    src_subfolders = []
    dst_subfolders = []
    for sub in os.listdir(src_path):
        src_sub = os.path.join(src_path, sub)
        dst_sub = os.path.join(dst_path, sub)
        if os.path.exists(src_sub) and os.path.isdir(src_sub):
            src_subfolders.append(src_sub)
        if os.path.exists(dst_sub) and os.path.isdir(dst_sub):
            dst_subfolders.append(dst_sub)
        else:
            os.mkdir(dst_sub)
            dst_subfolders.append(dst_sub)
    # print src_subfolders
    # print dst_subfolders
    # print '-' * 80
    src_len = len(src_subfolders)
    dst_len = len(dst_subfolders)
    img_postfix = ['jpg', 'png', 'jpeg']
    if (src_len != 0) and (src_len == dst_len):
        for idn in range(src_len):
            src_sub = src_subfolders[idn]
            dst_sub = dst_subfolders[idn]
            pfix = 0
            for img in os.listdir(src_sub):
                if img[-3:] in img_postfix:
                    img_abs_path = os.path.join(src_sub, img)
                    pfix = preprocess_img(img_abs_path, dst_sub, pfix)
            print('-' * 80)
            print(src_sub.split("\\")[-1] + "Done!")


if __name__ == '__main__':
    src_data_path = os.path.join(os.getcwd(), "samples")
    dst_data_path = os.path.join(os.getcwd(), "data")
    main(src_data_path, dst_data_path)

运行前后your_folder内结构

运行前

.
├── data
├── preprocess_data.py
└── samples
    ├── Bumblebee
    │   └── Bumblebee.jpg
    └── Transformers
        └── newwar.jpg

运行后

.
├── data
│   ├── Bumblebee
│   │   ├── 0.jpg
│   │   ├── 1.jpg
│   │   ├── 10.jpg
│   │   ├── 11.jpg
│   │   ├── 12.jpg
│   │   ├── 13.jpg
│   │   ├── 14.jpg
│   │   ├── 15.jpg
│   │   ├── 16.jpg
│   │   ├── 17.jpg
│   │   ├── 18.jpg
│   │   ├── 19.jpg
│   │   ├── 2.jpg
│   │   ├── 20.jpg
│   │   ├── 21.jpg
│   │   ├── 22.jpg
│   │   ├── 23.jpg
│   │   ├── 24.jpg
│   │   ├── 3.jpg
│   │   ├── 4.jpg
│   │   ├── 5.jpg
│   │   ├── 6.jpg
│   │   ├── 7.jpg
│   │   ├── 8.jpg
│   │   └── 9.jpg
│   └── Transformers
│       ├── 0.jpg
│       ├── 1.jpg
│       ├── 10.jpg
│       ├── 11.jpg
│       ├── 12.jpg
│       ├── 13.jpg
│       ├── 14.jpg
│       ├── 15.jpg
│       ├── 16.jpg
│       ├── 17.jpg
│       ├── 18.jpg
│       ├── 19.jpg
│       ├── 2.jpg
│       ├── 20.jpg
│       ├── 21.jpg
│       ├── 22.jpg
│       ├── 23.jpg
│       ├── 24.jpg
│       ├── 3.jpg
│       ├── 4.jpg
│       ├── 5.jpg
│       ├── 6.jpg
│       ├── 7.jpg
│       ├── 8.jpg
│       └── 9.jpg
├── preprocess_data.py
└── samples
    ├── Bumblebee
    │   └── Bumblebee.jpg
    └── Transformers
        └── newwar.jpg

猜你喜欢

转载自blog.csdn.net/tianzhaixing/article/details/75455427
今日推荐