数据增强的方法总结及代码实现

在训练模型的时候,经常会出现数据不够多,如此就会出现过拟合等问题,通过对训练图片进行变换可以得到泛化能力更强的网络,更好的适应应用场景。博主用自己项目中常用的一些方法代码写出来。

一、数据增强方法总结

 1、平移。在图像平面上对图像以一定方式进行平移。

2、翻转图像。沿着水平或者垂直方向翻转图像。

3、旋转角度。随机旋转图像一定角度; 改变图像内容的朝向。

4、随机颜色。对图像进行颜色抖动,对图像的每个像素RGB进行随机扰动, 常用的噪声模式是椒盐噪声和高斯噪声。

5、对比度增强。增强图像对比度,也可以用直方图均衡化。

6、亮度增强。将整个图像亮度调高。

7、颜色增强。

8、还有随机裁剪、尺度变换等代码就不赘述了。

二、数据增强方法代码

1、平移

from PIL import Image
from PIL import ImageEnhance
import os
import cv2
import numpy as np
def move(root_path,img_name,off): #平移,平移尺度为off
    img = Image.open(os.path.join(root_path, img_name))
    offset = img.offset(off,0)
    return offset

2、翻转图像

def flip(root_path,img_name):   #翻转图像
    img = Image.open(os.path.join(root_path, img_name))
    filp_img = img.transpose(Image.FLIP_LEFT_RIGHT)
    # filp_img.save(os.path.join(root_path,img_name.split('.')[0] + '_flip.jpg'))
    return filp_img

 3、旋转角度

def rotation(root_path, img_name):
    img = Image.open(os.path.join(root_path, img_name))
    rotation_img = img.rotate(20) #旋转角度
    # rotation_img.save(os.path.join(root_path,img_name.split('.')[0] + '_rotation.jpg'))
    return rotation_img

4、随机颜色 

def randomColor(root_path, img_name): #随机颜色
    """
    对图像进行颜色抖动
    :param image: PIL的图像image
    :return: 有颜色色差的图像image
    """
    image = Image.open(os.path.join(root_path, img_name))
    random_factor = np.random.randint(0, 31) / 10.  # 随机因子
    color_image = ImageEnhance.Color(image).enhance(random_factor)  # 调整图像的饱和度
    random_factor = np.random.randint(10, 21) / 10.  # 随机因子
    brightness_image = ImageEnhance.Brightness(color_image).enhance(random_factor)  # 调整图像的亮度
    random_factor = np.random.randint(10, 21) / 10.  # 随机因子
    contrast_image = ImageEnhance.Contrast(brightness_image).enhance(random_factor)  # 调整图像对比度
    random_factor = np.random.randint(0, 31) / 10.  # 随机因子
    return ImageEnhance.Sharpness(contrast_image).enhance(random_factor)  # 调整图像锐度

5、对比度增强


def contrastEnhancement(root_path,img_name):#对比度增强
    image = Image.open(os.path.join(root_path, img_name))
    enh_con = ImageEnhance.Contrast(image)
    contrast = 1.5
    image_contrasted = enh_con.enhance(contrast)
    return image_contrasted

 

6、亮度增强 

def brightnessEnhancement(root_path,img_name):#亮度增强
    image = Image.open(os.path.join(root_path, img_name))
    enh_bri = ImageEnhance.Brightness(image)
    brightness = 1.5
    image_brightened = enh_bri.enhance(brightness)
    return image_brightened

7、颜色增强

def colorEnhancement(root_path,img_name):#颜色增强
    image = Image.open(os.path.join(root_path, img_name))
    enh_col = ImageEnhance.Color(image)
    color = 1.5
    image_colored = enh_col.enhance(color)
    return image_colored

三、工程具体实现代码

注意: 

1、将下列代码中flip函数换成你要实现的数据增强方法的名字即可。

2、包含的库必须要包含

from PIL import Image
from PIL import ImageEnhance
import os
import cv2
import numpy as np
imageDir="C:/Users/Administrator/Desktop/right/" #要改变的图片的路径文件夹
saveDir="C:/Users/Administrator/Desktop/save/"   #要保存的图片的路径文件夹
i=0
for name in os.listdir(imageDir):
    i=i+1
    saveName="car"+str(i)+".jpg"
    saveImage=flip(imageDir,name)
    saveImage.save(os.path.join(saveDir,saveName))

 

 

  • 29
    点赞
  • 256
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
### 回答1: 下面是一个用于ESP32通过光敏传感器采集数据的示例代码: ```C++ const int analogPin = 34; // 光敏传感器连接的模拟输入引脚 int sensorValue = 0; // 从传感器读取的模拟值 void setup() { Serial.begin(9600); // 初始化串口通信 } void loop() { sensorValue = analogRead(analogPin); // 读取模拟输入引脚的值 Serial.println(sensorValue); // 将读取的值打印到串口监视器上 delay(1000); // 延时1秒钟 } ``` 这段代码首先定义了一个变量 `analogPin` 来表示连接光敏传感器的模拟输入引脚的引脚号。然后在 `setup()` 函数中初始化串口通信。在 `loop()` 函数中,使用 `analogRead()` 函数读取模拟输入引脚的值,并将读取的值打印到串口监视器上。为了避免过于频繁地读取传感器,代码还使用了 `delay()` 函数来添加一个1秒钟的延时。 ### 回答2: ESP32是一款常用的开源微控制器板,通过光敏传感器可以实现对光照强度的检测与数据采集。下面是一个简单的实现代码示例: 首先,我们需要连接光敏传感器到ESP32开发板的GPIO引脚。可以选择一个可用的引脚,例如GPIO 34。 然后,在代码中需要包含适当的头文件。需要引入Arduino库,可以通过`#include <Arduino.h>`语句实现。 接下来,需要定义光敏传感器所连接的引脚。可以使用`#define`语句来定义,比如`#define LIGHT_SENSOR_PIN 34`。 在程序的`setup()`函数中,需要初始化光敏传感器引脚。可以使用`pinMode()`函数来设置引脚的模式,示例代码如下: ``` void setup() { pinMode(LIGHT_SENSOR_PIN, INPUT); Serial.begin(9600); } ``` 在程序的`loop()`函数中,我们可以通过`analogRead()`函数读取光敏传感器的数值,并将其打印到串口监视器上。示例代码如下: ``` void loop() { int lightValue = analogRead(LIGHT_SENSOR_PIN); Serial.print("光照强度:"); Serial.println(lightValue); delay(1000); // 延迟1秒 } ``` 最后,通过编译和上传代码到ESP32开发板,我们就可以开始采集光敏传感器的数据了。打开串口监视器,可以看到每秒钟光照强度的数值。 总结:通过光敏传感器和ESP32,我们可以实现对光照强度的检测与数据采集。以上是一个简单的示例代码,你可以根据实际需求进行修改和扩展。 ### 回答3: 要通过ESP32来采集光敏传感器的数据,我们首先需要连接光敏传感器到ESP32的某个GPIO引脚上。光敏传感器是一个模拟传感器,它的输出信号是一个与光照强度成正比的电压值。我们需要使用一个模数转换器(ADC)将模拟信号转换成数字信号,以便于ESP32进行处理和分析。 首先,我们需要在代码中引入必要的库,并定义所使用的GPIO引脚和其他变量。例如,我们可以定义光敏传感器连接到ESP32的引脚为A0,同时定义一个变量来存储光照强度的值。 接下来,我们需要在代码中初始化ADC,并设置其所使用的引脚。我们可以调用analogRead()函数来读取光敏传感器的模拟值,并将其存储到之前定义的变量中。 为了实时地获取光照强度的数值,我们可以将读取光敏传感器的代码放入一个循环中,并添加适当的延时。例如,我们可以使用delay()函数来设置每次读取之间的时间间隔。这样,在循环中不断地读取和更新光照强度的值,就可以实时地获取传感器的数据了。 最后,我们可以根据需要对光照强度的数值进行处理和分析。例如,可以将其发送到云平台,或者根据阈值判断光照强度是否达到某个条件,然后控制其他设备的行为。 总之,通过连接光敏传感器到ESP32的GPIO引脚上,然后使用ADC来进行模数转换,并在代码中实时读取传感器的数值,我们就可以实现通过光敏传感器采集数据的功能了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值