【数据增强】按照十字线将图片裁剪为四部分(*4)

前言

        参加了”智蔗见智·向新而生”广西第二届人工智能大赛,发现数据中存在大量的脏数据,但是如果全部裁减掉那么十分可惜,那该如何是好呢?我的解决办法是:将图片划分为多个尺寸较小的子图片,最后删掉带有缺失块的子图片,所以本文真是记录这样一种办法去将一个 长宽相等 的图片,裁剪为四个 长宽相等 的子图片。 

对以旋转图片以增强数据集实例如下(两者配合可以提高数据集到原来的(4*4=16)十六倍):

旋转图片增强数据集http://t.csdn.cn/g8Vji


按照十字线将图片裁剪为四部分

效果展示:

代码

1.导入包

2.将单张图片按十字架方式裁剪

3.将目录下的所有图片按照十字架方式裁剪

4.进入使用

5.图片保存说明


效果展示:

切割之前的图片:

原图

切割之后的图片:

结果图

代码

'''

参数说明:

----------------------------avg_cut_four_square----------------------------

@param:square_img_path:

因为默认PIL库读取,所以选择以输入图片的路径作为参数。

@param:square_img_name:

输入图片名称,方便之后为裁剪的四个子图命名-如part1+square_img_name

@param:save_path:

裁剪后四个子图保存目录,假如我要保存在output这个目录之中去,那么我需要设置save_path='output',如果不设置那么默认保存在工作区。

----------------------------avg_cut_four_square_main----------------------------

@param:im_path:

需要被裁剪图片的目录。

@param:save_path:

作为avg_cut_four_square的参数,所以解释如上。

'''

import os
import cv2
from PIL import Image

def avg_cut_four_square(square_img_path, square_img_name, save_path = ''):
    img = Image.open(square_img_path)
    size = img.size
    weight = int(size[0] // 2)
    height = int(size[1] // 2)
    now_iter_id = 1
    for i in range(2):
        for j in range(2):
            box = (weight * j, height * i, weight * (j + 1), height * (i + 1))
            region = img.crop(box)
            region.save(os.path.join(save_path, 'part{}'.format(now_iter_id) + square_img_name))
            now_iter_id += 1

def avg_cut_four_square_main(im_path, save_path=''):
    im_list = os.listdir(im_path)
    for im_name in im_list:
        avg_cut_four_square(os.path.join(im_path, im_name), im_name, save_path=save_path)

# how to use?
if __name__ == '__main__':
    ori_img_path = 'VOCdevkit\VOC2007\JPEGImages'
    # 将ori_img_path目录下所有图片切割,且保存在ori目录下
    avg_cut_four_square_main(ori_img_path,save_path='ori') 
    print('ori is ok!')
 

1.导入包

import os
import cv2
from PIL import Image

2.将单张图片按十字架方式裁剪


def avg_cut_four_square(square_img_path, square_img_name, save_path = ''):
    img = Image.open(square_img_path)
    size = img.size
    weight = int(size[0] // 2)
    height = int(size[1] // 2)
    now_iter_id = 1
    for i in range(2):
        for j in range(2):
            box = (weight * j, height * i, weight * (j + 1), height * (i + 1))
            region = img.crop(box)
            region.save(os.path.join(save_path, 'part{}'.format(now_iter_id) + square_img_name))
            now_iter_id += 1

3.将目录下的所有图片按照十字架方式裁剪

def avg_cut_four_square_main(im_path, save_path=''):
    im_list = os.listdir(im_path)
    for im_name in im_list:
        avg_cut_four_square(os.path.join(im_path, im_name), im_name, save_path=save_path)

4.进入使用

# how to use?
'''
特别说明:
save_path:不设置默认保存切割后的图片在运行目录下
'''
if __name__ == '__main__':
    ori_img_path = 'VOCdevkit\VOC2007\JPEGImages'
    # 将ori_img_path目录下所有图片切割,且保存在ori目录下
    avg_cut_four_square_main(ori_img_path,save_path='ori') 
    print('ori is ok!')
 

5.图片保存说明

'''
假设:你有这样一张图片 test.png
那么裁剪后将保存为:
part1_test.png 左上
part2_test.png 右上
part3_test.png 左下
part4_test.png 右下
原图片不会删除!
'''

完毕!

如果大家觉得有用,欢迎三连~ 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大气层煮月亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值