首页 > 编程语言 >OpenCV-Python扩充数据集

OpenCV-Python扩充数据集

时间:2023-02-13 16:11:48浏览次数:52  
标签:img Python cv2 OpenCV shape imgs 扩充 append spilt

在深度学习中,数据集规模直接影响模型训练后的性能。当我们数据集较少的时候可以通过不同的手段对现有的数据进行扩充。比如裁切,翻转,旋转,加入噪点,调整亮度等手段进行数据集的扩充。

代码演示的是对数据集进行裁切,旋转和镜像操作。代码并不是一键自动化生成,需要根据需求在main()中自行修改。

import cv2
import os

# 加载图片
def load_img(path):
    img=cv2.imread(path)
    if(img is None):
        print("load failed!")
        exit()
    # print(img.shape)
    shape = img.shape
    name = img.name
    return img, shape, name

# 旋转图片
def rotate_image(img):
    imgs = []
    imgs.append(cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE))
    imgs.append(cv2.rotate(img, cv2.ROTATE_180))
    imgs.append(cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE))
    return imgs

# 镜像图片
def mirror_image(img):
    imgs = []
    # 水平镜像
    imgs.append(cv2.flip(img, 1))
    # 垂直镜像
    imgs.append(cv2.flip(img, 0))
    # 对角镜像
    imgs.append(cv2.flip(img, -1))
    return imgs

# 分割图片
def spilt_image(img,shape):
    imgs=[]
    spilt_y = round(shape[1]/2)
    spilt_x= round(shape[0]/2)
    # 左上
    imgs.append(img[0:spilt_x, 0:spilt_y])
    # 左下
    imgs.append(img[0:spilt_x, spilt_y:-1])
    # 右下
    imgs.append(img[spilt_x:-1, spilt_y:-1])
    # 右上
    imgs.append(img[spilt_x:-1, 0:spilt_y])
    return imgs

# 保存图片
def save(img, path):
    cv2.imwrite(path,img)

def main():
    # 输入路径
    input_path = r"/home/shawn.li/Desktop/New Folder/spilt"
    # 输出路径
    output_path = r"/home/shawn.li/Desktop/New Folder/11"
    # 计数器,替换文件名
    i = 0

    for img_name in os.listdir(input_path):
        img, shape, name = load_img(input_path +"/"+ img_name)

        # 分割图片,四份
        imgs = spilt_image(img, shape)
        # 旋转图片,三份
        imgs = rotate_image(img)
        # 镜像图片
        imgs = mirror_image(img)

        for cropped_img in imgs:
            i += 1
            save(cropped_img, output_path+"/"+str(i) +".jpg")
            print("Saved.")


if __name__ == "__main__":
    main()

标签:img,Python,cv2,OpenCV,shape,imgs,扩充,append,spilt
From: https://www.cnblogs.com/trendyshuai/p/17116759.html

相关文章

  • python常用的搜索字符内容函数详解:re.findall/findfiter
    区别findall返回listfinditer返回一个MatchObject类型的iterator详细举例介绍1、findall在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返......
  • python操作百度网盘
    1、首先需要你去百度网盘开放平台申请一个控制台权限2、开通后新建应用  3、应用新建完之后你会得到:   这是我的代码:start_web.pyclassIndexHandler(tor......
  • python的学习之路Day2
    2023.2.13DAY2今日内容概要编程语言的发展史python解释器版本解释器的下载与安装多版本共存(必会)第一个python程序编程软件的下载(pycharm)   ......
  • python retry feature
    简单的retry功能有两种实现方法retrymodule-可以实现简单的retry,指定retry次数。backoffmodule-相对于retry模块,功能更丰富一点。 retryexample......
  • python画图的简单案例
    #导包frompyecharts.chartsimportLinefrompyecharts.optionsimportTitleOpts,ToolboxOpts,LegendOpts,VisualMapOpts#创建一个折线图像对象,即创建一个空的坐标系line......
  • python 导包失败:--ImportError: No module named XXXX
    问题Traceback(mostrecentcalllast):File"/home/app/auto_train/scripts/train_auto/train_auto.py",line5,in<module>frommonitorimportyarn_monitorIm......
  • Python缓存机制
    1.什么是缓存机制Python对象在创建的时候,会为其开辟一个内存,当变量引用该对象时,实际上是指向该对象的内存地址,当该对象不在被引用,会被垃圾回收机制回收,释放内存。但......
  • python datetime 时间模块
    datetime.now()会得到当前时间,datetime.datetime(2023,2,13,17,24,29,309381currentDateAndTime=datetime.now()print(f'Time:{currentDateAndTime.year}/{cur......
  • python中的模块调用案例
    此案例是本人在B站上学习“黑马程序员”up主的课,课程中一个案例特别好,在此记录一下。在创建包的时候,会产生一个__init__.py文件,如果没有这个文件,那么就是生成的普通文件夹。......
  • python自动化办公--pyautogui控制鼠标和键盘操作
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。 ......