如何对图片进行处理?
import os
import cv2
from glob import glob
import albumentations as A
from tqdm import tqdm# ==== 配置区域 ====
# 原始数据
images_dir = "./train/images"
labels_dir = "./train/labels"# 增强后保存
save_images_dir = "./train_aug/images"
save_labels_dir = "./train_aug/labels"
N = 5 # 每张图片生成的随机增强图数量os.makedirs(save_images_dir, exist_ok=True)
os.makedirs(save_labels_dir, exist_ok=True)# 数据增强组合(随机组合)
transform = A.Compose([A.GaussianBlur(blur_limit=(3,7), p=0.5), # 高斯模糊A.RandomBrightnessContrast(brightness_limit=0.3, contrast_limit=0.3, p=0.5), # 亮度/对比度A.Rotate(limit=15, border_mode=cv2.BORDER_CONSTANT, p=0.5), # 旋转A.GaussNoise(var_limit=(10.0, 50.0), p=0.5), # 高斯噪声
], bbox_params=A.BboxParams(format='yolo', label_fields=['class_labels']))# ==== 处理每张图片 ====
image_paths = glob(os.path.join(images_dir, "*.jpg"))for img_path in tqdm(image_paths):filename = os.path.basename(img_path)name, ext = os.path.splitext(filename)# 读取图像image = cv2.imread(img_path)# 读取标签label_path = os.path.join(labels_dir, f"{name}.txt")bboxes = []class_labels = []if os.path.exists(label_path):with open(label_path, "r") as f:for line in f.readlines():parts = line.strip().split()class_id = int(parts[0])x_center, y_center, bw, bh = map(float, parts[1:])bboxes.append([x_center, y_center, bw, bh])class_labels.append(class_id)# 生成 N 张随机组合增强图for i in range(N):augmented = transform(image=image, bboxes=bboxes, class_labels=class_labels)aug_image = augmented['image']aug_bboxes = augmented['bboxes']aug_labels = augmented['class_labels']# 保存图像save_img_path = os.path.join(save_images_dir, f"{name}_aug{i+1}{ext}")cv2.imwrite(save_img_path, aug_image)# 保存标签save_label_path = os.path.join(save_labels_dir, f"{name}_aug{i+1}.txt")with open(save_label_path, "w") as f:for bbox, label in zip(aug_bboxes, aug_labels):x_c, y_c, bw, bh = bboxf.write(f"{label} {x_c:.6f} {y_c:.6f} {bw:.6f} {bh:.6f}\n")print(f"随机组合数据增强完成,每张图片生成 {N} 张增强图!")