首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从COCO数据集创建掩码图像?

如何从COCO数据集创建掩码图像?
EN

Stack Overflow用户
提问于 2018-06-11 20:35:56
回答 5查看 23K关注 0票数 15

所以我一直在用这个代码。我正在尝试从COCO数据集生成图像的原始掩码。

代码语言:javascript
复制
dataDir='G:'
dataType='train2014'
annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)


coco=COCO(annFile)
annFile = '{}/annotations/person_keypoints_{}.json'.format(dataDir,dataType)
coco_kps=COCO(annFile)


catIds = coco.getCatIds(catNms=['person'])
imgIds = coco.getImgIds(catIds=catIds );
imgIds = coco.getImgIds(imgIds = imgIds[0])
img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]
I = io.imread('G:/train2014/'+img['file_name'])

plt.imshow(I); plt.axis('off')
annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
anns = coco.loadAnns(annIds)
coco.showAnns(anns)

但我得到的是这样的东西

但我想要的是这样的

我怎样才能得到每个图像的原始面具?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-11-05 16:48:15

我去派对迟到了,但如果能帮上忙的话。我不知道您的代码是否适用于您的应用程序,但是,如果您希望掩码的每个像素都具有注释类别id的值,那么您就不能仅仅添加掩码,因为有些掩码会重叠。我用了一个最大值:

代码语言:javascript
复制
cat_ids = coco.getCatIds()
anns_ids = coco.getAnnIds(imgIds=img['id'], catIds=cat_ids, iscrowd=None)
anns = coco.loadAnns(anns_ids)
anns_img = np.zeros((img['height'],img['width']))
for ann in anns:
    anns_img = np.maximum(anns_img,coco.annToMask(ann)*ann['category_id'])

编辑:下面是我在2017年数据集图像47112上的代码示例:

灰色阴影的值是在数据集描述中描述的类别的id。

请注意,在这里,比萨饼与其多边形边缘的桌子重叠。如果我们添加掩码,就会给出一个与批萨和表类之和相对应的id。但是,使用max时,只保留一个类。在这种情况下,由于类表的id大于类比萨饼的id,因此重叠会影响类表,即使比萨饼位于上面。不过,我不确定这个问题能否轻易解决。

票数 6
EN

Stack Overflow用户

发布于 2018-06-12 23:29:16

按照菲利普先生的直觉,我能够做出正确的代码,看起来如下所示。

代码语言:javascript
复制
mask = coco.annToMask(anns[0])
for i in range(len(anns)):
    mask += coco.annToMask(anns[i])

plt.imshow(mask)
票数 11
EN

Stack Overflow用户

发布于 2021-09-14 09:47:15

答案中没有完整的代码,所以我将其张贴在下面。

请先安装pycocotools

代码语言:javascript
复制
pip install pycocotools

导入所需的模块。我猜你是在用笔记本电脑。

代码语言:javascript
复制
from pycocotools.coco import COCO
import os
from PIL import Image
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline

加载coco数据集的注释。在这里,指定74图像。

代码语言:javascript
复制
coco = COCO('../datasets/coco/annotations/instances_train2017.json')
img_dir = '../datasets/coco/train2017'
image_id = 74

img = coco.imgs[image_id]
# loading annotations into memory...
# Done (t=12.70s)
# creating index...
# index created!

加载的img的信息如下。

代码语言:javascript
复制
img
# {'license': 2,
#  'file_name': '000000000074.jpg',
#  'coco_url': # 'http://images.cocodataset.org/train2017/000000000074.jpg',
#  'height': 426,
#  'width': 640,
#  'date_captured': '2013-11-15 03:08:44',
#  'flickr_url': # 'http://farm5.staticflickr.com/4087/5078192399_aaefdb5074_z.jpg# ',
#  'id': 74}

如下所示显示图像。

代码语言:javascript
复制
image = np.array(Image.open(os.path.join(img_dir, img['file_name'])))
plt.imshow(image, interpolation='nearest')
plt.show()

如果您想看到覆盖结果:

代码语言:javascript
复制
plt.imshow(image)
cat_ids = coco.getCatIds()
anns_ids = coco.getAnnIds(imgIds=img['id'], catIds=cat_ids, iscrowd=None)
anns = coco.loadAnns(anns_ids)
coco.showAnns(anns)

如果你只想看到面具,就像法希德热衣汗回答的那样,做以下几件事:

代码语言:javascript
复制
mask = coco.annToMask(anns[0])
for i in range(len(anns)):
    mask += coco.annToMask(anns[i])

plt.imshow(mask)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50805634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档