COCO数据集bbox和instance_masks可视化

参考博客:COCO数据集可视化 + 物体检测标注格式-coco可视化

1、物体框可视化
from pycocotools.coco import COCO
import cv2 as cv
import os
import numpy as np
import random

img_path = 'val2017/' # 把图片直接放在同一文件夹下
annFile = 'instances_val2017.json' # 同样

coco = COCO(annFile)
cats = coco.loadCats(coco.getCatIds())

catIds = coco.getCatIds(catNms=['yuanhuan', 'yellow', 'green', 'red', 'indicator'])
imgIds = coco.getImgIds(catIds=catIds)
img_list = os.listdir(img_path)
for i in range(len(img_list)):
    img = coco.loadImgs(imgIds[np.random.randint(0, len(imgIds))])[0]
    image_name = img['file_name']

    # 加了catIds就是只加载目标类别的anno,不加就是图像中所有的类别anno
    annIds = coco.getAnnIds(imgIds=img['id'], catIds=[], iscrowd=None)
    anns = coco.loadAnns(annIds)
    
    coco.showAnns(anns)
    
    coordinates = []
    img_raw = cv.imread(os.path.join(img_path, image_name))
    for j in range(len(anns)):
        x1 = int(anns[j]['bbox'][0])
        y1 = int(anns[j]['bbox'][1] + anns[j]['bbox'][3])
        x2 = int(anns[j]['bbox'][0] + anns[j]['bbox'][2])
        y2 = int(anns[j]['bbox'][1])
        cv.rectangle(img_raw,
                      (x1, y1),
                      (x2, y2),
                      (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
                      2)
    cv.imshow('image', img_raw)
    cv.waitKey()

样例:

2、实例mask可视化
from pycocotools.coco import COCO
from skimage import io
from matplotlib import pyplot as plt
import cv2 as cv

dataset_dir = 'val2017/'
json_file = 'instances_val2017.json'
coco = COCO(json_file)
# 展示coco的所有类别
print(coco.cats)
# catIds = coco.getCatIds(catNms=['cat', 'person']) # catIds=1,2 表示同时含有人和猫这一类
catIds = coco.getCatIds(catNms=['person']) # catIds=1 表示人这一类
# catIds = coco.getCatIds(catNms=['yuanhuan', 'yellow', 'green', 'red', 'indicator']) # catIds=1 表示人这一类
imgIds = coco.getImgIds(catIds=catIds ) # 图片id,许多值
for i in range(len(imgIds)):
    img = coco.loadImgs(imgIds[i])[0]
    I = io.imread(dataset_dir + img['file_name'])
    
    plt.axis('off')
    plt.imshow(I) #绘制图像,显示交给plt.show()处理
    annIds = coco.getAnnIds(imgIds=img['id'], iscrowd=None)
    # 加了catIds就是只加载目标类别的anno,不加就是图像中所有的类别anno
    # annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
    anns = coco.loadAnns(annIds)
    coco.showAnns(anns)
    plt.savefig('ans.png')
    plt.clf()
    ans = cv.imread('ans.png')
    try:
        cv.imshow('mask', ans)
        cv.waitKey()
    except:
        pass

样例:

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根引用的内容,对于COCO数据集可视化可以分为三部分:标注框bbox的单独可视化、分割标注segmentation的单独可视化以及bbox和segmentation的联合可视化。 对于标注框bbox的单独可视化,可以使用OpenCV或COCO API来实现。使用OpenCV的话,可以读取图像和对应的标注文件,然后利用OpenCV的绘制函数将标注框绘制在图像上。另外,也可以使用COCO API来读取JSON格式的标注文件,然后按照API提供的函数进行可视化。 对于分割标注segmentation的单独可视化,可以使用相似的方法。可以读取图像和对应的标注文件,然后根据标注的分割信息,使用OpenCV或其他图像处理库将分割结果可视化出来。 对于bbox和segmentation的联合可视化,可以将标注框和分割结果叠加在图像上,以更清晰地展示目标物体的位置和形状。 此外,还可以加载对应照片的语义分析数据,并根据需要进行打印或展示。可以使用COCO API加载对应的语义分析数据,并通过调用API提供的函数来展示数据。 综上所述,COCO数据集可视化可以通过加载图像和对应的标注文件,利用OpenCV、COCO API或其他图像处理库来实现标注框和分割结果的可视化,并可以根据需要加载并展示照片的语义分析数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [COCO数据集annotations解析以及可视化](https://blog.csdn.net/ZitaoWang/article/details/119824877)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [COCO数据集可视化程序(包括bbox和segmentation)](https://blog.csdn.net/wtandyn/article/details/109751015)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值