You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将COCO数据集的Run Length Encoding(RLE)转回segmentation格式

RLE转COCO segmentation格式解决方案

你可以通过pycocotools结合轮廓提取工具实现反向转换,完整实现代码如下:

from pycocotools import mask
import numpy as np
import cv2

def rle_to_segmentation(rle):
    # 将RLE解码为二值掩码
    binary_mask = mask.decode(rle)
    # 提取掩码外层轮廓
    contours, _ = cv2.findContours(binary_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    segmentation = []
    for contour in contours:
        # 调整轮廓格式为COCO要求的一维浮点数组
        contour_list = contour.flatten().astype(float).tolist()
        # 过滤点数不足的无效轮廓(COCO要求多边形至少3个点,即6个坐标值)
        if len(contour_list) >= 6:
            segmentation.append(contour_list)
    return segmentation

# 输入你要转换的RLE结构
rle = {
    'size': [640, 529],
    'counts': b'_PX9330cc07O2N1j\\ODhb0=U]OEkb0;T]OFlb0:T]OFlb0:R]OHnb0d02N1O2N2N2M201O1O000006J2N001OEh\\OMYc03l\\OGUc08:0c\\OFTc09m\\OIPc08o\\OIPc09n\\OHQc0d00O1O0012N0O12\\Oi\\O031Vc0KV]O0[j:'
}

# 调用转换得到segmentation
segmentation = rle_to_segmentation(rle)

注意事项

  • 若需要完全还原原始标注的所有坐标点,可将轮廓提取参数cv2.CHAIN_APPROX_SIMPLE替换为cv2.CHAIN_APPROX_NONE,该参数会保留轮廓上的每一个像素点,不会做冗余点压缩
  • 若标注的iscrowd属性为1,对应RLE可能包含多个连通区域,上述代码会自动将所有连通区域的轮廓分别加入segmentation数组中,符合COCO格式规范
  • 若不想引入OpenCV依赖,可使用scikit-image库的find_contours接口实现相同的轮廓提取逻辑

内容的提问来源于stack exchange,提问作者Yuriy Leonov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:42:03