news 2026/4/3 3:09:38

pycocotools绘制标注结果(bbox,segment,pose)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pycocotools绘制标注结果(bbox,segment,pose)

博主提供docker开发镜像(主要面向深度学习、计算机视觉和机器人开发等需要 GPU 支持的场景)用于测试所有博客用例代码,下载地址(ubuntu24_cux_dev)[https://wilson.blog.csdn.net/article/details/156309082]

以下是一个基于pycocotools开发的 Python 函数,支持对bbox(边界框)segment(分割掩码)pose(关键点)分别提供激活参数的可视化方案。该函数通过动态过滤标注类型实现灵活控制:

importmatplotlib.pyplotaspltfrompycocotools.cocoimportCOCOimportnumpyasnpdefvisualize_coco_annotations(ann_file,img_dir,img_id=None,show_bbox=True,show_segment=True,show_pose=True,figsize=(12,8)):""" 可视化 COCO 格式标注,支持按需激活 bbox/segment/pose 参数: ann_file (str): COCO 标注文件路径 (.json) img_dir (str): 对应图像目录路径 img_id (int, optional): 指定图像ID,None 表示随机选择 show_bbox/show_segment/show_pose (bool): 是否显示对应元素 figsize (tuple): 图像显示尺寸 """# 初始化 COCO APIcoco=COCO(ann_file)# 获取图像列表img_ids=coco.getImgIds()target_id=img_idifimg_idisnotNoneelsenp.random.choice(img_ids)img_info=coco.loadImgs(target_id)[0]# 加载对应图像img_path=f"{img_dir}/{img_info['file_name']}"img=plt.imread(img_path)# 获取当前图像所有标注ann_ids=coco.getAnnIds(imgIds=target_id)anns=coco.loadAnns(ann_ids)# 创建可视化画布plt.figure(figsize=figsize)ax=plt.gca()ax.imshow(img)ax.axis("off")# 按类型过滤并绘制标注filtered_anns=[]# 处理 bboxifshow_bbox:bbox_anns=[annforanninannsif'bbox'inann]filtered_anns.extend(bbox_anns)# 处理 segmentifshow_segment:seg_anns=[annforanninannsif'segmentation'inann]filtered_anns.extend(seg_anns)# 处理 poseifshow_pose:pose_anns=[annforanninannsif'keypoints'inann]filtered_anns.extend(pose_anns)# 绘制过滤后的标注coco.showAnns(filtered_anns)plt.title(f"Image ID:{target_id}")plt.show()# 使用示例visualize_coco_annotations(ann_file="path/to/annotations.json",img_dir="path/to/images",show_bbox=True,show_segment=True,show_pose=False# 仅关闭关键点显示)

核心功能说明

  1. 动态参数控制

    • 通过show_bbox/show_segment/show_pose布尔参数精确控制三类标注的显示
    • 参数默认全开启,符合常规可视化需求
  2. 智能标注过滤

    • 根据 COCO 标注字段自动识别类型:
      • bbox: 包含bbox字段
      • segment: 包含segmentation字段(支持 RLE/多边形格式)
      • pose: 包含keypoints字段
    • 避免手动类型判断,直接通过字段存在性过滤
  3. 图像加载优化

    • 自动处理图像路径拼接
    • 支持随机图像选择(未指定img_id时)
  4. 可视化增强

    • 自动关闭坐标轴,突出标注内容
    • 添加图像 ID 标题便于定位
    • 可调节显示尺寸适应不同场景

高级用法扩展

  1. 自定义样式控制

    # 在 showAnns 前添加样式参数coco.showAnns(filtered_anns,box_color=(255,0,0),# bbox 颜色segment_color=(0,255,0),# segment 颜色keypoint_color=(0,0,255))# pose 颜色
  2. 批量处理模式

    # 遍历指定图像ID列表forimg_idintarget_ids:visualize_coco_annotations(...,img_id=img_id)
  3. 结果保存

    plt.savefig(f"visualize_{target_id}.jpg",bbox_inches='tight')

常见问题处理

  • 缺失字段处理:当某类标注不存在时,对应参数自动失效(如无分割标注时show_segment无效)
  • 坐标兼容性:自动处理 COCO 的归一化坐标(需确保图像尺寸正确)
  • 内存优化:大尺寸图像建议使用plt.close()及时释放资源

该函数完整实现了参数化控制三类标注的可视化需求,可直接集成到数据验证、模型调试等流程中,通过灵活参数配置适应不同场景的可视化需求。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/24 8:19:00

队列集详解

队列集(Queue Set)是FreeRTOS中用于统一管理多个队列和信号量的关键数据结构,它允许任务通过单一API调用同时监听多个通信对象,显著提升多源数据处理效率和系统实时性。一、队列集的核心概念1. 基本定义队列集是FreeRTOS特有的数据…

作者头像 李华
网站建设 2026/3/26 23:56:20

STM32F103步进电机S曲线加减速定位算法详解

stm32f103步进S曲线加减速定位算法在嵌入式开发中,步进电机的控制是一个常见的需求,尤其是在需要精确定位的场合。今天我们来聊聊如何在STM32F103上实现步进电机的S曲线加减速定位算法。这个算法不仅能让我们更平滑地控制电机,还能减少机械冲…

作者头像 李华
网站建设 2026/3/31 4:36:26

程序员2026年金三银四面试突击之Java权威指南-面试场景题!

Java面试场景题权威指南(2026年面试突击版)在2026年的“金三银四”招聘旺季,Java面试是程序员求职的关键环节。面试场景题通常考察实际问题的解决能力,包括多线程、集合框架、JVM、设计模式和算法等核心领域。本指南将逐步帮助你突…

作者头像 李华
网站建设 2026/3/29 5:53:36

4D通用世界模型!中科院NeoVerse用百万单目视频直接构建

中国科学院自动化研究所与CreateAI团队,利用海量互联网单目视频构建了一个4D世界模型NeoVerse。构建即时响应、物理一致的4D世界模型,长期以来面临着数据匮乏与训练低效的双重诅咒。传统的解决方案要么受困于昂贵稀缺的多视角数据,限制了模型…

作者头像 李华
网站建设 2026/4/1 16:51:54

英伟达、英特尔和AMD芯片同台竞技:CES 2026各自都展示了怎样的实力

全球最大消费电子展CES 2026上,英伟达、英特尔和AMD新品发布,体现了全球计算产业的历史性转折,AI算力的芯片竞争已经演变为平台架构的全面战争。英伟达重构计算定义的极端协同黄仁勋在CES 2026上带来的是基于全新计算哲学的Rubin计算平台。游…

作者头像 李华
网站建设 2026/4/1 15:10:57

iOS App的tcp、udp数据包抓取在实际开发中的使用方式

我开始用数据流抓包的方式看 iOS 网络行为,是在一次很典型的场景里。 接口返回完全正常,日志也没有异常,但功能在真机上偶发失效。 代理抓包工具里,HTTPS 请求干净得不像是有问题的样子。先明确一件事:iOS 数据流抓包在…

作者头像 李华