使用 Python 和 OpenCV 进行数据增广

数据增广是通过技术手段增加数据集多样性,防止模型过拟合。本文介绍了使用Python和OpenCV实现的对象检测任务数据增广,包括随机裁剪、断流器、颜色抖动、添加噪音和过滤等方法。断流器常用于图像识别,但对对象检测需做调整,以避免丢失小对象。颜色抖动和添加噪音是简单而有效的增强手段,而过滤如模糊、高斯和中值滤波也可用于增强图像。
摘要由CSDN通过智能技术生成

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

874ea3177380d6e45dba08755d806fdc.png

数据扩充是一种增加数据集多样性的技术,无需收集更多真实数据,但仍有助于提高模型精度并防止模型过度拟合。在这篇文章中,我们将学习使用 Python 和 OpenCV 为对象检测任务实现最流行和最有效的数据扩充过程。

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

  1. 随机裁剪

  2. 断流器

  3. 颜色抖动

  4. 添加噪音

  5. 过滤

首先,让我们导入几个库并准备一些必要的子程序。

import os
import cv2
import numpy as np
import random


def file_lines_to_list(path):
'''
    ### Convert Lines in TXT File to List ###
    path: path to file
    '''
with open(path) as f:
        content = f.readlines()
    content = [(x.strip()).split() for x in content]
return content


def get_file_name(path):
'''
    ### Get Filename of Filepath ###
    path: path to file
    '''
    basename = os.path.basename(path)
    onlyname = os.path.splitext(basename)[0]
return onlyname


def write_anno_to_txt(boxes, filepath):
'''
    ### Write Annotation to TXT File ###
    boxes: format [[obj x1 y1 x2 y2],...]
    filepath: path/to/file.txt
    '''
    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()

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

6f449f7ef4932d31e075d2afc0962823.png

随机裁剪

随机裁剪随机选择一个区域并裁剪出来做一个新的数据样本,裁剪后的区域应该与原始图像具有相同的宽高比以保持物体的形状。

3095488596884581b14ec8113e32c3f8.png

从上图中,左图表示带有真实边界框(红色)的原始图像,右图是通过裁剪橙色框内的区域创建的新样本。在新样本的注释中,去除左图中与橙色框不重叠的所有对象,并细化位于橙色框边界上的对象的坐标以适合新图像样本,原始图像随机裁剪的输出为新裁剪图像及其注释。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学视觉

您的赞赏是我们坚持下去的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值
>