目标检测数据增强:截取出bbox中的图片

crop_img文件的作用为截取出bbox中的图片

import os
import shutil
from os.path import join
import cv2
import glob

root_dir = "./fruit" #原始图片保存的位置
save_dir = "./bbox" #生成截取图片的位置

jpg_list = glob.glob(root_dir + "/*.jpg")


fo = open("dpj_small.txt", "w") #截取出来的图片位置

max_s = -1
min_s = 1000

for jpg_path in jpg_list: #遍历所有图片
    # jpg_path = jpg_list[3]
    txt_path = jpg_path.replace("jpg", 
### 传统数据增强方法在目标检测数据集上的应用 对于目标检测任务而言,传统的数据增强方法有助于增加训练样本多样性,从而改善模型泛化能力并减少过拟合现象。常用的数据增强手段包括但不限于: #### 图像翻转 水平或垂直方向上对原始图像及其标注框进行镜像操作,这不会改变物体类别标签,仅需相应调整边界框坐标位置。 ```python import cv2 import numpy as np def flip_image(image, bboxes, direction='horizontal'): h, w = image.shape[:2] if direction == 'horizontal': flipped_img = cv2.flip(image, 1) for bbox in bboxes: xmin, ymin, xmax, ymax = bbox new_xmin = w - xmax new_xmax = w - xmin yield (new_xmin, ymin, new_xmax, ymax) elif direction == 'vertical': flipped_img = cv2.flip(image, 0) for bbox in bboxes: xmin, ymin, xmax, ymax = bbox new_ymin = h - ymax new_ymax = h - ymin yield (xmin, new_ymin, xmax, new_ymax) ``` #### 尺寸缩放与裁剪 随机比例缩小放大整幅图象尺寸,并配合中心区域截取固定大小子窗口;或者直接选取任意矩形范围内的局部片段作为新样例输入给定网络结构学习利用。 ```python from random import uniform def scale_and_crop(image, bboxes, min_scale=0.5, max_scale=1.5, crop_size=(300, 300)): scale_factor = uniform(min_scale, max_scale) resized_img = cv2.resize(image, None, fx=scale_factor, fy=scale_factor) rh, rw = resized_img.shape[:2] ch, cw = crop_size top_left_x = int(uniform(0, rw-cw)) top_left_y = int(uniform(0, rh-ch)) cropped_img = resized_img[top_left_y : top_left_y+ch, top_left_x : top_left_x+cw] adjusted_bboxes = [] for bbox in bboxes: xmin, ymin, xmax, ymax = map(lambda v: round(v*scale_factor), bbox) adj_bbox = ( max(xmin-top_left_x, 0), max(ymin-top_left_y, 0), min(xmax-top_left_x, cw)-cw*(xmax<=top_left_x), min(ymax-top_left_y, ch)-ch*(ymax<=top_left_y) ) adjusted_bboxes.append(adj_bbox) return cropped_img, adjusted_bboxes ``` #### 色彩抖动 通过调节亮度、对比度、饱度以及色调等色彩属性来模拟不同光照条件下的拍摄效果变化情况,进而强化系统的鲁棒性适应性表现力。 ```python import imgaug.augmenters as iaa seq_color_jitter = iaa.Sequential([ iaa.MultiplyAndAddToBrightness(mul=(0.8, 1.2)), iaa.LinearContrast((0.75, 1.25)), iaa.AddToHueAndSaturation((-20, 20)) ]) def apply_color_jitter(image): augmented_image = seq_color_jitter(image=image) return augmented_image ``` 这些基本变换组合起来可以构成丰富的预处理流程,在实际项目开发过程中可根据具体应用场景灵活选用合适的增强措施[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值