基于python的数据集扩充增强

news2024/9/20 14:48:53

前言

  数据增强技术在深度学习中得到了广泛的应用,它能够有效地扩充训练数据集的大小,提高模型的泛化能力,同时也能够有效地防止过拟合现象的发生。在本篇中,将讲解一种基于 Python 和 OpenCV 库实现的数据增强方法,并提供一个示例代码。
  首先,需要安装 OpenCV 库及其 Python 接口。OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉库,提供了计算机视觉和机器视觉中常用的算法和工具。在 Python 中使用 OpenCV 库可以方便地对图像进行处理、分析和识别。

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

  接下来,通过 Python 实现一个数据增强函数 augment_data(img),它将对输入的图像进行多种处理,包括水平翻转、缩放、旋转、添加高斯噪音和调整对比度和亮度等。
在这里插入图片描述

  下面是具体的代码实现:

代码如下:

import cv2
import numpy as np
import os
import glob

# 数据增强函数
def augment_data(img):
    rows,cols,_ = img.shape

    # 水平翻转图像
    if np.random.random() > 0.5:
        img = cv2.flip(img, 1)
        img_name = os.path.splitext(save_path)[0] + "_flip.png"
        cv2.imwrite(img_name, img)
        print("Saved augmented image:", img_name)

    # 随机缩放图像
    scale = np.random.uniform(0.9, 1.1)
    M = cv2.getRotationMatrix2D((cols/2, rows/2), 0, scale)
    img_transformed = cv2.warpAffine(img, M, (cols, rows))
    img_name = os.path.splitext(save_path)[0] + "_transform.png"
    cv2.imwrite(img_name, img_transformed)
    print("Saved augmented image:", img_name)

    # 随机旋转图像
    angle = np.random.randint(-10, 10)
    M = cv2.getRotationMatrix2D((cols/2, rows/2), angle, 1)
    img_rotated = cv2.warpAffine(img, M, (cols, rows))
    img_name = os.path.splitext(save_path)[0] + "_rotated.png"
    cv2.imwrite(img_name, img_rotated)
    print("Saved augmented image:", img_name)

    # 添加高斯噪音
    mean = 0
    std = np.random.uniform(5, 15)
    noise = np.zeros(img.shape, np.float32)
    cv2.randn(noise, mean, std)
    noise = np.uint8(noise)
    img_noisy = cv2.add(img, noise)
    img_name = os.path.splitext(save_path)[0] + "_noisy.png"
    cv2.imwrite(img_name, img_noisy)
    print("Saved augmented image:", img_name)

    # 随机调整对比度和亮度
    alpha = np.random.uniform(0.8, 1.2)
    beta = np.random.randint(-10, 10)
    img_contrast = cv2.convertScaleAbs(img, alpha=alpha, beta=beta)
    img_name = os.path.splitext(save_path)[0] + "_contrast.png"
    cv2.imwrite(img_name, img_contrast)
    print("Saved augmented image:", img_name)

    return img


# 读取 data 文件夹中的所有图片,并进行数据增强
data_dir = "data"
save_dir = "result"
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

# 使用 glob 库来遍历 data 文件夹中所有图像
for img_path in glob.glob(os.path.join(data_dir, "*.png")):

    img = cv2.imread(img_path)

    # 获取保存增强后的图片文件名
    img_name = os.path.basename(img_path)
    save_path = os.path.join(save_dir, img_name)

    # 数据增强
    augment_data(img)

    # 保存原始图片
    cv2.imwrite(save_path, img)
    print("Saved original image:", save_path)

讲解

首先,创建一个名为 result 的文件夹用于存储增强后的图像。然后,利用 glob 库对 data 文件夹中的所有图像进行遍历,并通过 cv2.imread 函数读取图像文件。获取保存增强后的图片的路径和文件名,这可以通过 os.path.basename 函数和 os.path.join 函数实现。接下来,调用 augment_data 函数对读取的图像进行数据增强,并保存增强后的图片。通过 OpenCV 库提供的 cv2.imwrite 函数,可以将增强后的每个图像保存为不同的文件,文件名中加入 _flip、_transform、_rotated、_noisy 和 _contrast 等后缀表示不同的增强方式。

综上,讲解了通过 Python 和 OpenCV 库实现了一个简单的数据增强方法。通过对图像进行水平翻转、缩放、旋转、添加噪音和调整对比度和亮度等操作,扩充了训练数据集的大小,用于提高了模型的泛化能力和鲁棒性。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Notes/Domino 14新变化

大家好,才是真的好。 一周没见,有没有分外想念? 这周马上要发布HCL Notes/Domino 14 Drop1版本,许多人摩拳擦掌,跃跃欲试。今天我们就不说功能,而从底层来说,这回14版本带来的变化真的很大&am…

JAVA如何学习爬虫呢?

学习Java爬虫需要掌握以下几个方面: Java基础知识:包括Java语法、面向对象编程、集合框架等。 网络编程:了解HTTP协议、Socket编程等。 HTML、CSS、JavaScript基础:了解网页的基本结构和样式,以及JavaScript的基本语…

掌握Scala数据结构(1)ARRAY、LIST

一、数组 (Array) (一)定长数组 1、数组定义 (1)定义数组时初始化数据、、 数组的静态初始化自动推断数组类型 手动指定数据类型 (2)定义时指定数组长度,后赋值 先定义,后赋值&…

不入耳蓝牙耳机音质好吗?音质表现好的不入耳蓝牙耳机推荐

​不入耳蓝牙耳机因其不入耳佩戴设计,受到很多人的喜欢,也更多人开始使用不入耳式蓝牙耳机了。为了让大家能更快选购不入耳蓝牙耳机,今天就让我来给大家介绍几款性能不错的不入耳蓝牙耳机,一起看看有哪些吧。 一、南卡OE不入耳蓝…

电流检测电路选高侧还是低侧

两种电流检测电路 在电路设计中,使用最广泛的电流采样方法是在电流回路中串联高精度的电阻,通过测量电阻两端的电压计算回路的电流值大小。具体检测方法有如下两种: 高侧电流检测 图1 高侧电流检测 如图1,高侧电流检测&#xff…

Selenium各种浏览器的驱动下载

Selenium各种浏览器的驱动下载 谷歌浏览器:​​​​​​Chrome驱动版本点击下载(如果打不开,可以点击淘宝源进行下载) 微软Edge浏览器:Microsoft Edge驱动版本点击下载 火狐浏览器:Firefox驱动版本点击下载 Chrome…

科技点亮课堂,智能黑板解决方案

教育信息化自诞生以来,一直都在不断地向上发展,随着教育信息化2.0、教育现代化2035等战略的推进,教育信息化的步伐逐渐加快,越来越多的学校开始采用智慧型教学终端部署,以更好地促进高效、公平、个性化的教学发展。智能…

索尼mxf播放花帧无声音的修复方法

索尼的影视级摄像机一般是用MXF文件结构,在一些极端情况下(如断电)会生成RSV文件,此时RSV文件无文件结构(无文件头、元文件、文件尾等)仅仅为数据EC内容,今天我们来说一个特殊的案例,封装只做了文件头结果出…

prometheus监控应用数据(二)

prometheus监控应用数据(二) 本文承接上篇文章prometheus监控应用数据(一)。使用开源软件prometheus对上篇文章中提及到的数据进行可视化监控。 本文使用docker进行prometheus的部署,准备以下两个文件,以及文件内内容如下所示: .env文件 # Container Ti…

【头歌-Python】9.1 X射线衍射曲线绘制(project)第1~2关

第1关:X 射线衍射曲线 任务描述 本关任务:读文件中的数据绘制线图形。 相关知识 为了完成本关任务,你需要掌握: 1.python 读取文件 2.使用 matplotlib 绘制图形 python 读取文件 python读取文件可以用以下函数实现&#xff1…

华为OD机试真题 JavaScript 实现【记负均正】【牛客练习题】

一、题目描述 首先输入要输入的整数个数n,然后输入n个整数。输出为n个整数中负数的个数,和所有正整数的平均值,结果保留一位小数。 0即不是正整数,也不是负数,不计入计算。如果没有正数,则平均值为0。 数…

计算机网络3(网络层)

目录 1.网络层的作用 2.网际协议的四个协议 3.IP地址 4.IP地址的组成 5.IP地址的分类 6.IP地址 1.网络层的作用 寻址和路由的选择,连接的建立和终止,提供端到端的服务 单位是分组 2.网际协议的四个协议 ARP地址解析协议 :根据IP地址获取…

PortSwigger web缓存中毒(Cache Poisoning)

一、什么web缓存中毒? Web缓存中毒(Web Cache Poisoning)是一种攻击技术,攻击者通过操纵Web应用程序的缓存系统,将恶意或欺骗性内容注入到合法的缓存中,以欺骗用户或绕过安全控制。 Web缓存中毒的原理是利用…

Web UI 自动化测试框架哪个更适合你?

最近,项目上出于系统性稳定性、减少测试工作量考虑,打算在 Web 前端引入 BDD。由于上一个项目写了一定的 Cucumber 代码(BDD 测试框架之一),这个框架选型的责任便落到了我的肩膀上了。 在我们进行框架选型的时候&…

执行器-Query 执行详解

一、主要流程 本期主要为大家分享,在经过语法、词法分析并生成 AST 语法树后的执行流程,下图是完整流程展示: 图 1 整体流程图 一个 Query 语句执行,从 connExecutor 接收,再到解析完成的 AST 语法树,最后…

【哈希表part01】| 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

目录 ✿LeetCode242.有效的字母异位词❀ ✿LeetCode349.两个数组的交集❀ ✿LeetCode202.快乐数❀ ✿LeetCode1.两数之和❀ ✿LeetCode242.有效的字母异位词❀ 链接:242.有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的…

如何进行弱网测试?专项测试中最实用的方法了解一下……

目录 引言 一、什么是弱网测试? 二、为何要进行弱网测试? 三、如何做弱网测试? 四、弱网测试工具 引言 如今这个高度互联的时代里,网络环境对于应用程序的影响越来越重要。 而弱网测试就是用来检验应用程序在恶劣网络环境下…

AIGC与AidLux互联应用——AidLux端AIGC评测

使用diffusers生成图片,再通过socket编程完成pc端与AidLux之间通信,把生成的图像上传服务端,最后通过yolov5模型对生成的图像进行评测 视频流程如下: AIGC与AidLux互联应用——AidLux端AIGC评测 生成图片如图所示:

Redis的Java客户端-Java客户端以及SpringDataRedis的介绍与使用

1. Redis的Java客户端 Spring Data Redis底层支持同时兼容Jedis和Lettuce两种不同的Redis客户端,可以根据需要任意选择使用其中的一种。这样既可以保留现有代码使用的Jedis方式,也可以通过使用基于Netty的高性能Lettuce客户端,提升应用的性能…

【RabbitMQ教程】前言 —— 中间件介绍

💧 【 R a b b i t M Q 教程】前言——中间件介绍 \color{#FF1493}{【RabbitMQ教程】前言 —— 中间件介绍} 【RabbitMQ教程】前言——中间件介绍💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云…