用Python+OpenCV进行数据扩充

本文介绍了如何使用Python和OpenCV进行数据扩充,包括随机裁剪、Cutout、颜色抖动、增加噪声和滤波等方法,以提高对象检测模型的精度和防止过拟合。Cutout在图像识别中的应用和对对象检测的适应性修改,以及噪声和滤波在数据增强中的作用也被详细阐述。
摘要由CSDN通过智能技术生成

c71eaf423052006b25e4669ccc3a8ed1.png

数据扩充是一种增加数据集多样性的技术,无需收集更多真实数据,但仍有助于提高模型精度并防止模型过拟合。

在本文中,你将学习使用Python和OpenCV为对象检测任务实现最流行、最高效的数据扩充过程。

即将引入的一组数据扩充方法包括:

  1. 随机裁剪

  2. Cutout

  3. 颜色抖动

  4. 增加噪音

  5. 过滤

首先,在继续之前,让我们导入几个库并准备一些必要的子例程。

import os
import cv2
import numpy as np
import random

def file_lines_to_list(path):
    '''
    ### 在TXT文件里的行转换为列表 ###
    path: 文件路径
    '''
    with open(path) as f:
        content = f.readlines()
    content = [(x.strip()).split() for x in content]
    return content

def get_file_name(path):
    '''
    ### 获取Filepath的文件名 ###
    path: 文件路径
    '''
    basename = os.path.basename(path)
    onlyname = os.path.splitext(basename)[0]
    return onlyname

def write_anno_to_txt(boxes, filepath):
    '''
    ### 给TXT文件写注释 ###
    boxes: format [[obj x1 y1 x2 y2],...]
    filepath: 文件路径
    '''
    txt_file = open(filepath, "w")
    for box in boxes:
        print(box[0], int(box[1]), int(box[2]), int(box[3]), int(box[4]), file=txt_file)
    txt_file.close()

下面的图片是在这篇文章中使用的示例图片。

61be060e7726bca136a04ea13b9c92ef.png

随机裁剪

随机裁剪随机选择一个区域并进行裁剪以生成新的数据样本,裁剪后的区域应具有与原始图像相同的宽高比,以保持对象的形状。

08406632b23a0f4bdf5884b4cd612439.png

从上图中,左侧图像表示具有边界框(红色)的原始图像,通过裁剪橙色框内的区域创建一个新样本作为右侧图像。

在新示例的注释中,将删除与左侧图像中的橙色框不重叠的所有对象,并细化位于橙色框边界上的对象的坐标,使其适合新图像示例。原始图像的随机裁剪输出为新裁剪图像及其注释。

def randomcrop(img, gt_boxes, scale=0.5):
    '&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值