如何将Label-Studio的RLE标签转为黑白图像掩码并生成image.png
Label-Studio RLE标签转黑白掩码图像教程
给定如下格式的Label-Studio RLE标签数组(完整数据包含完整的rle序列):
[{"format": "rle", "rle": [0, 18, 192, 0, 57, 27, 255, 255, 255, 0, 259, 96, 17, 192, 97, 255, 248, 239, 227, 16, 2....., 255, 142, 3, 130, 21, 128, 0], "brushlabels": ["crack"], "original_width": 640, "original_height": 480}]如何将其转换为黑白图像掩码并生成
image.png?
解决步骤
1. 安装依赖库
执行以下命令安装处理图像和数组所需的工具:
pip install numpy pillow
2. 编写转换代码
Label-Studio的RLE格式是游程编码:每两个元素为一组,第一个值代表连续背景(黑色,像素值0)的长度,第二个值代表连续前景(白色,像素值255,对应crack标签)的长度,以此类推。以下代码可直接完成转换:
import numpy as np from PIL import Image # 替换为你的Label-Studio标签数据 label_data = [{"format": "rle", "rle": [0, 18, 192, 0, 57, 27, 255, 255, 255, 0, 259, 96, 17, 192, 97, 255, 248, 239, 227, 16, 2, 255, 142, 3, 130, 21, 128, 0], "brushlabels": ["crack"], "original_width": 640, "original_height": 480}] # 提取核心参数 rle_seq = label_data[0]['rle'] img_width = label_data[0]['original_width'] img_height = label_data[0]['original_height'] # 展开RLE序列为一维像素数组 flat_mask = [] for idx in range(0, len(rle_seq), 2): # 添加连续背景像素 flat_mask.extend([0] * rle_seq[idx]) # 添加连续前景像素,避免索引越界 if idx + 1 < len(rle_seq): flat_mask.extend([255] * rle_seq[idx+1]) # 确保像素总数与图像尺寸匹配 total_pixels = img_width * img_height flat_mask = flat_mask[:total_pixels] + [0] * (total_pixels - len(flat_mask)) # 转换为二维图像矩阵并保存 mask_array = np.array(flat_mask, dtype=np.uint8).reshape((img_height, img_width)) mask_img = Image.fromarray(mask_array) mask_img.save('image.png')
代码说明
- 遍历RLE序列,按组解析背景和前景的连续长度,展开为一维像素数组
- 处理RLE序列可能的长度偏差,确保最终像素总数等于图像宽高的乘积
- 通过numpy将一维数组转为对应尺寸的二维图像矩阵,最后用PIL保存为PNG格式的黑白掩码
内容的提问来源于stack exchange,提问作者Ali Waqas
相关产品推荐
相关产品推荐

