当前位置: 首页 > news >正文

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

输入:结果.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=1
            results.append(binary_mask*255) # mask*255,看的更清楚~
    results = np.sum(results, axis=0) #(可选)这一步是将实例分割转为语义分割mask,
    return results
    
 json_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)

相关文章:

  • 山东大学软件学院nosql实验一环境配置
  • C语言学习,希尔排序
  • 侯捷 C++ 课程学习笔记:C++ 标准库的体系结构与内核分析
  • WPF-Avalonia实践一两个页面的相关传递
  • 从零开始构建基于DeepSeek的智能客服系统
  • Python数据结构高级:图的表示与遍历
  • 验证码介绍及生成与验证
  • 去耦电容的作用详解
  • 网络安全之Web后端Python
  • v4l2子系统学习(五)subdev和media子系统
  • git 命令 设置别名
  • QT 引入Quazip和Zlib源码工程到项目中,无需编译成库,跨平台,加密压缩,带有压缩进度
  • Django数据库操作
  • 深入探究 C 语言内存函数:memcpy、memmove、memset 和 memcmp
  • VMware17.6+CentOS 8安装教程
  • 比较Spring AOP和AspectJ
  • [晕事]今天做了件晕事65,gcc,cmake, pragam
  • NGINX配置TCP负载均衡
  • Go基础之环境搭建
  • 【前端开发】能不能用Vue+Bootstrap进行项目开发?有什么需求场景需要用到的地方
  • 好看的网站的导航怎么做/促销活动推广方案
  • 做网站设计的提成点是多少/seo推广培训中心
  • 如何查询网站打开速度变慢/搜索引擎广告形式有
  • 网站建设最贵多少钱/重庆seo外包平台
  • 网站模板怎么改/长沙百度快速优化
  • 营销网站建设/山西太原百度公司