news 2026/5/22 10:17:56

对coco格式的分割标注生成二值mask

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
对coco格式的分割标注生成二值mask

@对coco格式的分割标注生成二值mask

对coco格式的分割标注生成二值mask

给定_annotations.coco.json文件,将里面的特定类别解码批量生成二值mask,代码如下:

import json from pathlib import Path import numpy as np from PIL import Image from pycocotools import mask as maskUtils def decode_coco_rle(rle: dict) -> np.ndarray: """ 使用 pycocotools 官方实现解码 COCO RLE,返回 0/255 的二值掩码。 rle 形如 {"counts": "...", "size": [height, width]}。 """ # 有些版本要求 counts 为 bytes,这里兼容处理一下 if isinstance(rle.get("counts"), str): rle = rle.copy() rle["counts"] = rle["counts"].encode("utf-8") mask = maskUtils.decode(rle) # H x W,0/1 uint8 # 统一转为 0/255 mask = (mask.astype(np.uint8)) * 255 return mask def main(): root = Path(__file__).resolve().parent coco_path = root / "_annotations.coco.json" images_dir = root / "images" masks_dir = root / "mask" masks_dir.mkdir(exist_ok=True) # 只保留的类别 id TARGET_CATEGORY_ID = 1 with coco_path.open("r", encoding="utf-8") as f: coco = json.load(f) # image_id -> image_info image_map = {img["id"]: img for img in coco["images"]} # image_id -> 该图像下、且 category_id == 1 的所有标注 annos_by_image = {} for anno in coco["annotations"]: if anno.get("category_id") != TARGET_CATEGORY_ID: # 忽略 category_id 为 0 或其它的标注 continue img_id = anno["image_id"] annos_by_image.setdefault(img_id, []).append(anno) # 对每张图,合成只包含 category_id == 1 的 mask for image_id, info in image_map.items(): height = info["height"] width = info["width"] mask = np.zeros((height, width), dtype=np.uint8) for anno in annos_by_image.get(image_id, []): seg = anno["segmentation"] # 只处理 RLE 字典形式 if not isinstance(seg, dict) or "counts" not in seg: continue decoded = decode_coco_rle(seg) # 多个实例取最大,合并为一张前景=255 的二值图 mask = np.maximum(mask, decoded) # 保存为灰度图(0/255) out_path = masks_dir / info["file_name"] Image.fromarray(mask, mode="L").save(out_path) print(f"saved: {out_path}") print("全部处理完成。") if __name__ == "__main__": main()

coco格式的存储形式示例如下:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 10:19:35

27、深入了解 Samba 系统及相关组件配置

深入了解 Samba 系统及相关组件配置 1. Samba 系统文件位置 Samba 系统文件的位置一直是让不少用户感到困扰的问题。在 20 世纪 90 年代初,Samba 团队默认将其安装在 /usr/local/samba 目录下,这在当时是合理的,因为许多开源软件都安装在 /usr/local 子目录中。 不过…

作者头像 李华
网站建设 2026/5/21 23:53:25

突破封锁线:在内网无网络国产化环境中部署Kubernetes v1.33.3

文章目录全文开始服务器环境前期准备工作关闭防火墙和selinux主机名解析开启bridge网桥过滤关闭swap分区安装containerd配置containerd启动服务安装nerdctl安装master节点移动相关资源安装相关资源集群初始化部署网络插件安装worker节点前置条件安装kube三件套worker加入集群Ng…

作者头像 李华
网站建设 2026/5/21 10:37:33

LobeChat能否加载LoRA微调模型?轻量化适配方案探讨

LobeChat 能否加载 LoRA 微调模型?轻量化适配的实践路径 在大语言模型日益普及的今天,开发者不再满足于“通用智能”的粗放式体验。越来越多的应用场景要求 AI 具备特定领域的专业知识——比如法律咨询、编程辅助或医疗问答。然而,全参数微调…

作者头像 李华
网站建设 2026/5/22 6:05:45

为什么YOLO被称为‘你只看一次’的革命性设计?

为什么YOLO被称为“你只看一次”的革命性设计? 在自动驾驶汽车疾驰于城市街道的瞬间,系统必须在几十毫秒内识别出行人、车辆和交通标志;在智能手机的人像模式中,背景虚化需要实时精准地分割主体;在工厂的高速生产线上&…

作者头像 李华
网站建设 2026/5/20 22:21:46

每次重启终端都要重新输 Token?Claude Code 环境变量永久配置指南

【实战避坑】Claude Code 每次重启都要重新输 Key?永久配置环境变量的正确姿势在使用 Claude Code 命令行工具(CLI)时,很多朋友(特别是刚刚尝试接入第三方模型,如 GLM、DeepSeek 等)可能会遇到这…

作者头像 李华