X-AnyLabeling系列:多边形坐标点转掩码

多边形坐标点转掩码

代码参考: X-AnyLabeling中的.\X-AnyLabeling\ tools\polygon_mask_conversion.py。这里主要拆分出多边形坐标点转掩码,同时增加了参数和支持带有中文名的路径。多边形坐标点存储在json文件中,格式可参考X-AnyLabeling中给出的示例,下面也给出一个具体的简单示例。掩码转多边形坐标点部分可参考另外一篇博客:https://blog.youkuaiyun.com/familytaijun/article/details/141401587。

json格式示例

这里展示的仅仅是一个大致的格式,特别是points里面的值没有太多含义,请勿使用做测试。

{
  "version": "2.4.0",
  "flags": {},
  "shapes": [
    {
      "label": "test",
      "text": "",
      "points": [
        [
          599,
          208
        ],
        [
          584,
          209
        ],
        [
          552,
          219
        ],
        [
          547,
          222
        ],
        [
          530,
          227
        ],
        [
          516,
          233
        ],
      "shape_type": "polygon"
    }
  ],
  "imagePath": "1.jpg",
  "imageData": null,
  "imageHeight": 640,
  "imageWidth": 960
}

代码示例

import json
import numpy as np
import cv2

def poly_to_mask(json_path, dst_mask_path):
    with open(json_path, "r", encoding="utf-8") as f:
        data = json.load(f)
    polygons = []
    for shape in data["shapes"]:
        points = shape["points"]
        polygon = []
        for point in points:
            x, y = point
            polygon.append((x, y))
        polygons.append(polygon)

    image_height = data["imageHeight"]
    image_width = data["imageWidth"]
    mask = np.zeros((image_height, image_width), dtype=np.uint8)
    for polygon_points in polygons:
        np_polygon = np.array(polygon_points, np.int32)
        np_polygon = np_polygon.reshape((-1, 1, 2))
        cv2.fillPoly(mask, [np_polygon], color=255)

    cv2.imencode('.png', mask)[1].tofile(dst_mask_path)


if __name__ == '__main__':
    json_path = "./json/test.json"
    dst_mask_path = "./masks/test.png"

    poly_to_mask(json_path, dst_mask_path)

```
### X-AnyLabeling 的分割功能概述 X-AnyLabeling 是一款开源的标注工具,支持多种类型的图像标注任务,其中包括语义分割、实例分割以及全景分割等功能。这些功能允许用户为图像中的每个像素分配特定的类别标签或唯一实例标识符。 #### 工具的核心特性 X-AnyLabeling 支持通过图形界面完成复杂的分割任务,并能够导出兼容主流深度学习框架的数据格式。其设计目标之一是简化从数据准备到模型训练的过程[^1]。例如,在处理全景分割时,该工具不仅提供语义级别的分类能力,还支持对同一类别的不同对象赋予独立的实例 ID。 以下是关于如何使用 X-AnyLabeling 进行分割任务的具体说明: --- ### 安装与配置环境 为了运行 X-AnyLabeling 并利用其分割功能,需先安装必要的依赖项。推荐按照官方文档指引设置开发环境。如果需要自定义扩展,则可参考 ultralytics 库的相关实现[^2]。 ```bash pip install anylabeling # 安装 AnyLabeling 主包 ``` 对于更高级的功能定制化需求,可以直接克隆项目仓库并调整内部逻辑以满足具体业务场景的要求。 --- ### 数据集导入与预览 在启动应用后,可以通过菜单选项加载本地图片文件夹或者 COCO/Pascal VOC 等标准格式的数据集。针对不同的分割模式(如语义/实例/全景),应选择匹配的任务模板来初始化工作区。 注意:当切换至全景分割视图时,软件会自动尝试解析输入目录下的 `.json` 配置文件,其中记录了各区域所属类别及其对应的掩码信息。 --- ### 执行分割操作 一旦进入编辑状态,即可借助鼠标绘制边界框或自由笔刷标记感兴趣的目标物体。此外,还有快捷键辅助快速修正错误轮廓线段位置。 某些情况下可能遇到性能瓶颈现象——尤其是在高分辨率影像上实时渲染大量多边形顶点坐标点集合的时候。此时建议降低显示精度参数值以便流畅交互体验。 --- ### 导出结果 最终生成的结果通常保存为 JSON 文件形式,便于后续接入 YOLOv8 或其他机器学习流水线环节进一步分析优化。确保遵循所选算法预期接收的数据结构规范描述方式。 ```python import json with open('output.json', 'r') as f: data = json.load(f) print(data['annotations'][0]['segmentation']) # 查看第一个对象的分隔路径节点列表 ``` --- ### 常见问题排查指南 假如发现无法正常开启新工程窗口,请确认 Python 版本是否符合最低要求;另外也要核查 Qt GUI 组件是否存在冲突版本号差异情况等问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值