news 2026/5/14 5:29:36

对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/11 21:27:56

29、软件开发与网络技术综合指南

软件开发与网络技术综合指南 1 软件开发与开源许可 1.1 开发免费软件的步骤 若你开发了一个新程序,并希望它能为公众带来最大的价值,最佳方式是将其变为免费软件,让每个人都能依据特定条款进行再分发和修改。以下是具体操作步骤: 1. 添加声明 :在程序中附上以下声明,…

作者头像 李华
网站建设 2026/5/11 21:27:56

JSpecify 1.0:终结 Java NPE 的统一空安全方案

引言 在 Java 与 Spring 应用开发过程中,空指针异常(NullPointerException,NPE)始终是开发者面临的一项持久挑战。此类异常不仅可能导致生产环境中的系统崩溃,还会引发排查困难、维护成本高昂的线上故障。相较之下&am…

作者头像 李华
网站建设 2026/5/9 3:04:31

意外伤害与意外医疗的区别?

“明明买的是意外险,怎么医疗费只报一半,伤残赔偿还说不够格?”许多人在理赔时才发现,“意外伤害”与“意外医疗”虽仅两字之差,最终获赔金额却可能相距数万甚至数十万。 花费8万元医疗费,伤残鉴定十级&am…

作者头像 李华
网站建设 2026/5/11 21:27:30

Seed-Coder-8B-Base能否辅助编写Istio权限策略?

Seed-Coder-8B-Base能否辅助编写Istio权限策略? 在现代云原生系统中,服务之间每天要完成成千上万次调用。而这些调用背后的安全控制,早已不是“等出了问题再补”的事后措施,而是决定系统是否能上线的核心前提。Istio 的 Authoriz…

作者头像 李华
网站建设 2026/5/11 22:37:41

计算机毕业设计springboot基于Java开发的药店药品管理系统 基于Spring Boot框架的Java药店药品信息化管理系统设计与实现 Java语言结合Spring Boot开发的药店药品管理

计算机毕业设计springboot基于Java开发的药店药品管理系统490pr9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着信息技术的飞速发展,传统药店的管理方式已经难以…

作者头像 李华