首页 > 编程语言 >基于Python实现RLE格式分割标注文件的格式转换

基于Python实现RLE格式分割标注文件的格式转换

时间:2023-07-29 10:22:25浏览次数:31  
标签:分割 RLE mask Python 掩码 格式 标注

下面我将详细讲解“基于Python实现RLE格式分割标注文件的格式转换”的完整攻略。

一、RLE格式分割标注文件是什么?

RLE格式是一种更加高效的图像语义分割数据表示格式,其数据以一串RLE编码的方式进行存储,而不是以像素点的形式存储,有效减少了数据的体积。RLE格式分割标注文件即是使用RLE格式对物体分割区域进行标注的文件。

二、RLE格式分割标注文件的转换

2.1 准备工作

首先,我们需要准备一份RLE格式的分割标注文件及其对应的源图像文件,其中RLE格式分割标注文件应该满足以下的规则:

  • 文件格式为txt文本文件
  • 文件内容由每行表示一个物体的标注信息,每行包含两个值:物体的标签和物体的RLE编码字符串,两部分之间用空格隔开

示例1

我们以一张名为“example.jpg”的图像和其对应的RLE标注文件“example.txt”为例,来进行后续的操作。其中,example.txt的内容如下所示:

person 197550 2 189248 11 188396 1 185156 20 177382 42 168516 68 154300 89 148204 93 136282 104 127800 7 126976 14 114488 127 112512 6 103194 14 78310 140 76762 135 71100 152 64402 16 64341 16 58520 166 51983 182 45446 198 38909 214 32372 230 25835 246 19298 262 12761 278 6224 294

2.2 将RLE编码字符串转换为分割掩码

接下来,我们需要将RLE编码的字符串转换为分割掩码,代码如下:

 
import numpy as np
from pycocotools import mask as maskUtils

def rle_decode(rle_str, height, width):
    rle_encoding = maskUtils.frPyObjects([rle_str], height, width)
    segmentation_mask = maskUtils.decode(rle_encoding)
    return np.transpose(segmentation_mask, (1, 0, 2))[:, :, 0]

这段代码采用了COCO数据集中提供的maskUtils工具包来进行RLE编码字符串到分割掩码的转换,可以将其放入自己的代码中进行调用。注意,在使用此方法之前需要通过pip安装pycocotools工具包。

示例2

我们将代码应用到示例1中的RLE字符串,代码如下:

rle_str = '197550 2 189248 11 188396 1 185156 20 177382 42 168516 68 154300 89 148204 93 136282 104 127800 7 126976 14 114488 127 112512 6 103194 14 78310 140 76762 135 71100 152 64402 16 64341 16 58520 166 51983 182 45446 198 38909 214 32372 230 25835 246 19298 262 12761 278 6224 294'
height, width = 480, 480
mask = rle_decode(rle_str, height, width)
print(mask.shape, mask.dtype)

运行结果如下:

(480, 480) uint8

2.3 将分割掩码保存到文件中

最后,我们需要将分割掩码保存到文件中,代码如下:

from PIL import Image

def save_mask(mask, filename):
    im = Image.fromarray(mask)
    im.save(filename)

这段代码采用了Pillow库中的Image类,将分割掩码保存为png格式的图片。

示例3

我们将代码应用到示例2中的分割掩码,将其保存为png格式的图片,代码如下:

save_mask(mask, 'example_mask.png')

运行后,会在当前目录下生成名为“example_mask.png”的分割掩码图片。

三、总结

通过以上的操作,我们将RLE格式的分割标注文件转换为了常规的分割掩码图像,并且我们也可以将相应的代码进行封装,实现批量处理。

   

标签:分割,RLE,mask,Python,掩码,格式,标注
From: https://www.cnblogs.com/chentiao/p/17589363.html

相关文章

  • Python TensorFlow循环神经网络RNN-LSTM神经网络预测股票市场价格时间序列和MSE评估准
    全文下载链接:http://tecdat.cn/?p=26562最近我们被客户要求撰写关于循环神经网络的研究报告,包括一些图形和统计输出。自2000年 1月以来的股票价格数据。我们使用的是Microsoft股票。该项目包括:将时间序列数据转换为分类问题。使用TensorFlow的LSTM模型由MSE衡......
  • 利用pyinstaller发布不依赖python解释器的可执行exe
    现在打包app.py,从Windows命令提示符(cmd)运行:pyinstaller.exe--onefile--windowedapp.py就这么简单。如果打包成功,最终的可执行文件app.exe和任何相关文件将放在dist目录中,如果该目录不存在,将创建该目录。  PyInstallerManualVersionPyInstaller5.1Homepagehttps://pyinstall......
  • 动态构建IN查询数据格式的Oracle SQL实现方法
    背景在实际的数据库查询中,经常会遇到根据不同条件动态构建IN查询的需求。例如,当选择一个部门时,需要查询指定部门的数据;当选择多个部门时,需要查询多个部门的数据。在OracleSQL中,我们不能直接在一条SQL查询中动态构建IN查询的数据格式。然而,使用CASEWHEN语句,我们可以巧妙地解决这个......
  • Python工程师面试宝典 一线大厂资深面试官亲授
    第01章Python服务端工程师面试指导-课程导学篇第02章面试流程介绍第03章Python语言基础考察点第04章Python算法与数据结构考察点第05章编程范式考察点第06章操作系统考察点第07章网络编程考察点第08章数据库考察点第09章PythonWeb框架考察点第10章系统设计考察点第11章......
  • Python-3-Python变量与运算符
    第三章:变量与运算符3-1变量的介绍1.变量只能包含字母、数字、下划线。变量名可以以字母或下划线开头,但绝不是数字开头。2.不能将python关键字作为变量名,常见python关键字有:FalseclassfinallyisreturnTruecontinueforlambdat......
  • Python-2-Python数据类型
    第二章:Python数据类型2-1字符串简单介绍'A'+'B'字符串连接输出'AB';'Hello'*3多次连接3次。'Hello'[0]取第一个字符;'Hello'[1]取第二个字符;'Hello'[-1]取最后一个字符;'Hello'[1:3]从e开始取取2个字符el,1+2=3所以是[1:3];'H......
  • Python-1-Python起步
    1-1选择python的理由相对于其它语言,Python容易上手,语法通俗易懂;复杂的概念已经封装好,不需要考虑内存的释放与申请,其它语言上百行代码解决的问题,Python只需要几十行甚至更短的代码。Python设计哲学:优雅、明确、简单//打印print("HelloWorld");//交换xyx,y=y,x 1-2python......
  • Python exceptions All In One
    PythonexceptionsAllInOneDifferentexceptionsareraisedfordifferentreasons.Commonexceptions:ImportError:animportfails;IndexError:alistisindexedwithanout-of-rangenumber;NameError:anunknownvariableisused;SyntaxError:thecode......
  • 想学Python高级编程?这个技巧你不能错过!
    前言熟悉Python的朋友都知道,Python有一个让人又爱又恨的特点:数据类型的定义和使用非常的灵活。在编写一个简易脚本的时候,这个特点让编程难度显著下降;但如果你需要编写一个大型程序,而且还需要多人协作时,没有类型定义的数据类型,真的让人崩溃!也许Python的维护者也发现了这个问题,从......
  • Python基础day55
    通过结合前端页面实现ORM对数据的增删改查写一个页面,把数据库中的数据以表格形式展示出来,然后在每一行的后面加上两个按钮,分别是修改、删除思路:思考修改功能的逻辑:1.确定修改哪条记录,怎么确定?通过主键id确定唯一一条记录2.点击修改的按钮,需要跳转到一个修改的......