【数据处理】COCO 数据集掩码 Run-Length Encoding (RLE) 编码转二进制掩码

ops/2025/2/28 2:41:06/

输入:结果.json
输出:mask.jpg
json内容示例如下:

{"labels":[ # class_id 1,2,3,...],"scores":[ # 置信度0.2,0.7,0.3,...],"bboxes":[[1244.0,161.0,1335.0,178.0],[1243.0,161.0,1336.0,178.0],[1242.0,160.0,1336.0,179.0],...],"masks": [ # Run-Length Encoding (RLE) 编码格式的掩码{"size": [1024,1536],"counts": "]UlV15eo06M3O1O100O1000KcPOG]o09dPOF\\o0:dPOF\\o0:dPOF\\o0:dPOF\\o0:cPOG]o0:bPOF^o0:bPOF^o0>0000000000000000000000000O100000000000000O100IaPOM_o03aPOM_o03aPOM_o02bPON^o02bPON^o02cPOM]o03cPOM]o02dPON\\o02dPON\\o02dPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03cPOM]o03dPOK]o05cPOK]o05700000000O1O2MYP;1hoD00Ojo10WPN002N1ONPkX6"},{"size": [1024,1536],"counts": "]UkV13io06K3N2N200O10000000000000000000000000000000000000000000000000O1000000000000000000O1000000IaPOM_o03aPOM_o03aPOM_o03aPOM_o03aPOM_o03aPOM_o03aPOM_o03aPOM_o03aPOL`o04`POL`o04`POL`o04`POL`o04`POL`o04`POL`o04`POL`o04`POL`o04`POL`o04aPOJ`o06`POJ`o06aPOI_o06bPOJ^o06600O1O2N1O1O10000000000000WP21hoM00OJ0^PO0ao026002N000001LQkW6"},{"size": [1024,1536],"counts": "]UjV12lo05J3M3N3N100O10000000O100000000000000000000000000000000000000000000O1000000000000000000O1000000000000000000000000O10O1000000000O1L_POIbo06_POIao06aPOI_o075O1O101N100O100000O010001NXPO0bo00^PO1ho00O1JN^PO2ao00^POOco02\\PONdo043000000O1MRkW6"},
}

counts 字段是 COCO 数据集中用于表示二进制掩码的 Run-Length Encoding (RLE) 编码格式。RLE 是一种无损数据压缩方法,特别适用于包含大量连续重复值的数据(如二进制掩码)。

RLE 编码格式
RLE 编码的基本思想是将连续的相同值(如 0 或 1)压缩为一个计数值。在 COCO 数据集的 RLE 编码中:

  • 编码是一个字符串,由一系列数字和符号组成。
  • 数字表示连续像素的数量。
  • 符号(如字母或特殊字符)表示像素的值(通常是 0 或 1)。

代码
Python 示例,使用 pycocotools 库将 RLE 编码转换为二进制掩码


def json2starmask(json_data):"""Processes the JSON data, decoding the masks for labels == 1 and scores > 0.3.Args:json_data (dict): Loaded JSON data."""results = []labels=json_data['labels']scores=json_data['scores']masks=json_data['masks']for i,(label,score,mask) in enumerate(zip(labels,scores,masks)) :if label == 1 and score > 0.3: # 这边可以设置想要解吗的label和置信度分数binary_mask = maskUtils.decode(mask) # min=0,max=1results.append(binary_mask*255) # mask*255,看的更清楚~results = np.sum(results, axis=0) #(可选)这一步是将实例分割转为语义分割mask,return resultsjson_path='/path/to/结果.json'with open(json_path, "r", encoding='utf-8') as jsonf:json_data = json.load(jsonf)decoded_masks = json2starmask(json_data)cv2.imwrite('decoded_masks.jpg',decoded_masks)

http://www.ppmy.cn/ops/161833.html

相关文章

线性回归(一)基于Scikit-Learn的简单线性回归

主要参考学习资料: 《机器学习算法的数学解析与Python实现》莫凡 著 前置知识:线性代数-Python 目录 问题背景数学模型假设函数损失函数优化方法训练步骤 代码实现特点 问题背景 回归问题是一类预测连续值的问题,满足这样要求的数学模型称作…

HW面试经验分享 | 北京蓝中研判岗

目录: 所面试的公司介绍 面试官的问题: 1、面试官先就是很常态化的让我做了一个自我介绍 2、自我介绍不错,听你讲熟悉TOP10漏洞,可以讲下自己熟悉哪些方面吗? 3、sql注入原理可以讲下吗? 4、sql注入绕WAF有…

.NET Core MVC IHttpActionResult 设置Headers

最近碰到调用我的方法要求返回一个代码值,但是要求是不放在返回实体里,而是放在返回的Headers上 本来返回我是直接用 return Json(res) 这种封装的方法特别简单,但是没有发现设置headers的地方 查询过之后不得已换了个返回 //原来方式 //…

通过命令启动steam的游戏

1. 启动Steam客户端 在命令行输入以下命令来启动Steam客户端: start steam://open/main 如果Steam未安装在默认路径,可能需要先定位到Steam的安装目录,例如: cd C:\Program Files (x86)\Steam start steam://open/main 2. 通过…

机器人部分专业课

华东理工 人工智能与机器人导论 Introduction of Artificial Intelligence and Robots 必修 考查 0.5 8 8 0 1 16477012 程序设计基础 The Fundamentals of Programming 必修 考试 3 64 32 32 1 47450012 算法与数据结构 Algorithm and Data Structure 必修 考试 3 56 40 …

python爬虫系列课程4:一个例子学会使用xpath语法

python爬虫系列课程4:一个例子学会使用xpath语法 本文通过一个例子,学会xpath的各种语法,可以作为xpath的查询手册使用,代码如下: from lxml import etreetext = <div> <ul><li class="item-1"><a href="link1.html">first i…

Centos服务器GCC安装

写在前面 唠叨两句 GCC是Linux系统中&#xff0c;进行C/C程序开发及运行的常用的工具包&#xff0c;很多软件安装的时候&#xff0c;需要使用这些工具包来进行运行。 本文所述是在Centos7的环境下进行 正文 gcc、gvv验证 使用如下命令验证gcc&#xff0c;如出现如图参数则…

10道Redis常见面试题速通

引言 本系列聚焦频率最高的面试题&#xff0c;用最简洁的文字表达中心思想&#xff0c;速通面试 1、Redis持久化数据和缓存怎么做扩容&#xff1f; 如果Redis被当做缓存使用&#xff0c;使用一致性哈希实现动态扩容缩容。如果Redis被当做一个持久化存储使用&#xff0c;必须使…