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[

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

被折叠的 条评论
为什么被折叠?



