labelme 标记目标内部空白区域

labelme 标记目标内部空白区域

在使用labelme进行标注时,有时会碰到标记目标内部存在背景区域的情况,这时可以通过在图像目标内部将空白区域标记出来,并标注为_background_(注意要加下划线),从而区分出来。
Alt

上图为labelme生成的mask图像的背景部分,背景的标注为_background_,其实就是labelme会自动将图片中没有标记的部分标注为_background_,所以我们只需要把这一部分也框出来分为背景就ok啦。

### 将 JSON 数据转换为灰度图 MASK 的处理方法 要将 Labelme 工具生成的 JSON 文件中的标注数据转换为单通道灰度图 MASK,可以按照以下方式实现: #### 转换逻辑 Labelme 生成的 JSON 文件通常包含了多边形形状(polygon)的数据结构。这些多边形可以通过 OpenCV 或其他库绘制到空白画布上,从而形成二值化掩码图像。通过叠加多个类别的掩码并赋予不同的像素值,最终可得到一张完整的灰度图。 以下是具体实现过程: 1. **加载 JSON 文件** 使用 Python 中的标准 `json` 库读取 JSON 文件的内容,并提取其中的关键字段,例如 `"shapes"` 和 `"imageSize"` 等[^1]。 2. **创建空白画布** 根据图片尺寸初始化一个全零矩阵作为背景,该矩阵代表目标灰度图的初始状态。 3. **解析多边形坐标** 遍历 JSON 文件中的每一个 shape 对象,获取其对应的类别名称和顶点列表。对于每个 shape,将其顶点列表传递给绘图函数以填充区域。 4. **绘制掩码** 利用 OpenCV 的 `cv2.fillPoly()` 函数,在空白画布上按指定类别编号填充值,完成对应区域标记。 5. **保存结果** 将生成的灰度图保存至本地磁盘。 --- #### 实现代码示例 下面是一个基于上述逻辑的具体实现代码片段: ```python import cv2 import numpy as np import json from PIL import Image def json_to_mask(json_file, output_image): with open(json_file, 'r', encoding='utf-8') as f: data = json.load(f) # 获取图像大小 image_height = data['imageHeight'] image_width = data['imageWidth'] # 创建空白画布 (默认黑色) mask = np.zeros((image_height, image_width), dtype=np.uint8) # 定义类别映射表 category_map = { "class_1": 1, "class_2": 2, "class_3": 3 } for shape in data['shapes']: label = shape['label'] # 类别名 points = np.array(shape['points'], dtype=np.int32).reshape((-1, 1, 2)) # 多边形顶点 if label not in category_map: continue # 如果类别未定义,则跳过 value = category_map[label] # 获取类别对应的数值 cv2.fillPoly(mask, [points], color=value) # 填充多边形区域 # 保存灰度图 Image.fromarray(mask).save(output_image) if __name__ == "__main__": input_json = "example.json" output_gray_mask = "output_mask.png" json_to_mask(input_json, output_gray_mask) ``` --- #### 关键说明 1. 上述代码假设已知类别及其对应的整数编码关系存储于字典变量 `category_map` 中。实际应用中可根据需求调整此部分配置。 2. 若需支持更多复杂场景(如嵌套对象或多实例分割),则可能需要扩展算法来区分不同实例之间的重叠情况[^2]。 3. 当前脚本仅适用于由 Labelme 导出的标准 JSON 文件格式;如果遇到自定义或非标准格式,请先确认其内部结构再做相应修改[^3]. 4. 可视化的灰度图可以直接用于后续训练流程或者进一步加工成 COCO 数据集所需的格式[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值