修改以上代码,用于指定文件夹,并可以指定某两种类别
时间: 2024-04-07 22:33:51 浏览: 13
下面是修改后的代码示例,可以用于指定文件夹和选择某两种类别的标注数据集增强扩充:
```python
import imgaug.augmenters as iaa
import os
import cv2
from labelme import utils
def augment_and_save(image_path, label_path, output_dir, categories, num_augmented=5):
# 读取图像和标签
image = cv2.imread(image_path)
label = utils.lblread(label_path)
# 选择指定类别的标注
selected_label = label.copy()
selected_categories = set(categories)
for category_id in range(1, label.max() + 1):
if category_id not in selected_categories:
selected_label[label == category_id] = 0
# 定义增强器
seq = iaa.Sequential([
iaa.Fliplr(0.5), # 随机水平翻转
iaa.Affine(rotate=(-10, 10)), # 随机旋转
iaa.GaussianBlur(sigma=(0, 1.0)), # 随机高斯模糊
iaa.AdditiveGaussianNoise(scale=(0, 0.05*255)) # 随机添加高斯噪声
])
# 扩充并保存增强后的图像和标签
for i in range(num_augmented):
augmented_image, augmented_label = seq(image=image, segmentation_maps=selected_label)
augmented_image_path = os.path.join(output_dir, f"augmented_image_{i}.jpg")
augmented_label_path = os.path.join(output_dir, f"augmented_label_{i}.json")
cv2.imwrite(augmented_image_path, augmented_image)
utils.lblsave(augmented_label_path, augmented_label)
# 示例用法
input_folder = "path/to/input_folder" # 输入文件夹
output_folder = "path/to/output_folder" # 输出文件夹
categories = [1, 2] # 需要选择的类别
num_augmented = 5 # 增强的图像数量
# 遍历输入文件夹中的图像和标签文件
for file_name in os.listdir(input_folder):
if file_name.endswith(".jpg"):
image_path = os.path.join(input_folder, file_name)
label_path = os.path.join(input_folder, file_name.replace(".jpg", ".json"))
augment_and_save(image_path, label_path, output_folder, categories, num_augmented)
```
在这个示例中,你需要将原始图像和标签分别存储在输入文件夹中,并将增强后的图像和标签保存到输出文件夹中。通过指定`categories`参数,你可以选择需要增强的类别。代码会遍历输入文件夹中的图像文件,并根据相应的标签文件进行增强扩充。请确保安装了Imgaug库和labelme库,并根据实际情况修改输入输出文件夹路径、选择的类别和增强的数量。