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

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

前言


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


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

image.png


效果展示:


切割之前的图片:


1dc618a0ed9580ce8bfa6facb208c08f.png


切割之后的图片:


5d4c6812c8535adbb050f4ddf2e1bce8.png


代码


'''


参数说明:


----------------------------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 右下
原图片不会删除!
'''

完毕!


相关文章
|
分布式计算 大数据 数据库连接
maxcompute开发环境问题之参数解析失败如何解决
MaxCompute开发环境是指设置和配置用于开发MaxCompute项目的本地或云端环境;本合集将指导用户如何搭建和管理MaxCompute开发环境,包括工具安装、配置和调试技巧。
|
编解码 Python
python--海温、OLR数据分布做显著性检验,绘制空间分布并打点
使用python对海洋气象数据做显著性检验,并绘制空间pattern
python--海温、OLR数据分布做显著性检验,绘制空间分布并打点
|
Java
|
Java 网络安全 Docker
curl: (56) Recv failure: Connection reset by peer
curl: (56) Recv failure: Connection reset by peer
2078 0
|
域名解析 网络协议 Linux
如何为linux服务器配置DNS解析?
如何为linux服务器配置DNS解析?
|
Linux Python Windows
利用python3获取当前计算机的名字和IP
众所周知,python是一门非常强大且简洁的语言。本篇主要来为大家介绍windows和linux下如何利用python获取当前计算机的ip和计算机名。 windows下,主要是利用socket模块。具体代码如下: import socket 获取 import socket Compute_name=socket.
3004 0
|
SQL API 分布式数据库
HBase客户端API使用
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/51985735 篇幅中使用的HBase版本为1.
1637 0
|
12天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1248 5