二值mask转polygon/RLE (coco segment格式)

文章介绍了如何将二值mask转换为COCO数据集中使用的polygon格式,涉及到cv2库的使用来提取轮廓,以及pycocotools库中的annToMask和annToRLE函数进行转换。还讨论了RLE格式作为首选的原因,以及提供的mask_to_rle函数将tensor形式的二值mask编码为RLE。

coco数据集annotation的segmentation并不是二值mask,而是polygon格式,
看一个annotation.

{
   
   
	"segmentation": [[510.66,423.01,511.72,420.03,510.45......]], #两两组成(x,y)坐标,polygon格式
	"area": 702.1057499999998, #面积
	"iscrowd": 0,  #是不是一群物体,为0是seg是polygon格式,否则是RLE格式
	"image_id": 289343,  #对应的image id
	"bbox": [473.07,395.93,38.65,28.67], #(x,y,w,h)
	"category_id": 18,  #分类label
	"id": 1768  #当前annotation的id,每一个图像有不止一个对象,所以要对每一个对象编号(每个对象的ID是唯一的)
},

segmentation其实是一个二值mask的轮廓点,
如果想把二值mask转成这种格式,需要提取轮廓。

1.Polygon格式

网上找来一张二值mask的图片

请添加图片描述

提取它的轮廓

mask_img = cv2.imread("mask.png",cv2.IMREAD_GRAYSCALE)
contours, _ = cv2.findContours(mask_img, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
polygons = []
for object in contours:
    coords = []

    for point in object:
        coords.append(int(point[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值