labelimg标记seg标签
时间: 2025-04-30 18:22:17 浏览: 34
### 使用 LabelImg 进行 Segmentation (Seg) 标签的标注
LabelImg 是一款广泛使用的图像标注工具,支持多种类型的标注任务。对于 segmentation (seg) 的需求,虽然 LabelImg 主要用于 bounding box 标注,但也可以通过一些配置来实现简单的 polygon 形式的分割标注。
#### 安装与启动 LabelImg
为了使用 LabelImg 创建 seg 分割标签,首先需要安装并启动该软件:
```bash
pip install labelimg
labelimg
```
这会打开图形界面的应用程序[^1]。
#### 配置 LabelImg 支持 Polygon Annotation
默认情况下,LabelImg 更倾向于矩形框标注。为了让其适应于多边形(polygon)形式的分割标注,需做如下调整:
- 启动应用后,在菜单栏选择 `Preferences` -> `Configure...`.
- 勾选选项 `"Create Polygons"` 和 `"Show Bounding Box Labels"`, 以便能够绘制不规则形状区域,并显示对应的类别名称。
完成上述设置之后,即可开始创建基于像素级别的对象实例掩码(annotation mask)[^1].
#### 开始标记 Segmentation 数据
当准备就绪时,按照以下方式操作来进行实际的对象分割标注工作:
- 打开待处理图片文件夹;
- 对每张图逐一点击左上角按钮切换到绘图模式;
- 利用手动画笔工具围绕目标物体轮廓描绘闭合曲线形成一个多边形;
- 绘制完成后双击确认当前 shape 或者按 Enter 键结束编辑状态;
- 输入正确的 class ID 号作为此 segment 属于哪一类别的标识符(注意 YOLO 中类目编号应从零起算),保存更改;
重复以上过程直至所有感兴趣的目标都被适当地标记出来为止。
#### 导出为兼容 YOLOv8 的格式
一旦完成了所有的标注作业,则可以考虑导出这些信息使之适用于像 YOLOv8 这样的模型训练流程中去。具体做法是在命令行输入相应指令将 `.xml` 文件转换成 txt 文本文件,其中包含着每个 object instance 的边界框坐标以及所属分类索引号等必要参数。
```python
from xml.etree import ElementTree as ET
import os
def convert_annotation(xml_file, output_dir):
tree = ET.parse(xml_file)
root = tree.getroot()
with open(os.path.join(output_dir, f"{os.path.splitext(os.path.basename(xml_file))[0]}.txt"), 'w') as out_f:
for obj in root.findall('object'):
cls_id = int(obj.find('name').text) # Assuming names are already mapped to IDs starting from 0.
bndbox = obj.find('bndbox')
points = []
for pt in ['xmin', 'ymin', 'xmax', 'ymax']:
cord = float(bndbox.find(pt).text)
points.append(cord)
line = f'{cls_id} {" ".join(map(str, points))}\n'
out_f.write(line)
for filename in os.listdir('/path/to/xml/files/'):
if not filename.endswith('.xml'): continue
convert_annotation(f'/path/to/xml/files/{filename}', '/desired/output/path/')
```
请注意这段脚本假设 XML 文件中的 `<name>` 字段已经映射成了整数型的 category id 并且是从 0 开始计数的。如果实际情况并非如此可能还需要额外编写逻辑来做相应的转换处理。
阅读全文
相关推荐










