在语义分割中,用labelme标注后的图片数据有JPG和对应的json文件,这些标注后的数据能否增强,若能请给出Python代码
时间: 2024-02-05 08:12:20 浏览: 119
可以使用数据增强来扩充标注数据集。以下是使用imgaug库进行数据增强的示例代码:
```python
import imgaug.augmenters as iaa
import numpy as np
import imageio
import json
# 读取标注数据
with open('example.json', 'r') as f:
data = json.load(f)
# 读取图片数据
image = imageio.imread('example.jpg')
# 将标注数据转化为mask
mask = np.zeros_like(image[:, :, 0], dtype=np.uint8)
for shape in data['shapes']:
label = shape['label']
points = shape['points']
mask = cv2.fillPoly(mask, [np.array(points, dtype=np.int32)], 255)
# 定义数据增强器
seq = iaa.Sequential([
iaa.HorizontalFlip(p=0.5), # 水平翻转
iaa.Crop(percent=(0, 0.1)), # 剪裁
iaa.GaussianBlur(sigma=(0, 3.0)), # 高斯模糊
iaa.Affine(rotate=(-45, 45)), # 旋转
iaa.Resize({"height": "keep-aspect-ratio", "width": 2.0}) # 缩放
])
# 进行数据增强
aug_image, aug_mask = seq(image=image, segmentation_maps=mask)
# 将增强后的mask转化为标注数据
aug_data = {"shapes": []}
for poly in cv2.findContours(aug_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]:
points = np.squeeze(poly).tolist()
shape = {"label": "object", "points": points}
aug_data["shapes"].append(shape)
# 保存增强后的数据
imageio.imwrite('augmented.jpg', aug_image)
with open('augmented.json', 'w') as f:
json.dump(aug_data, f)
```
此代码将读取一张标注数据为example.json和example.jpg的图片,将标注数据转化为对应的mask,然后使用imgaug库定义了一个数据增强器,最后使用增强器进行数据增强,并将增强后的图片和标注数据保存为augmented.json和augmented.jpg。
阅读全文