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()及时释放资源

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1124874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度测评9个AI论文工具,助本科生轻松搞定毕业论文!

深度测评9个AI论文工具,助本科生轻松搞定毕业论文! AI 工具如何改变论文写作的未来 随着人工智能技术的飞速发展,越来越多的本科生开始借助 AI 工具来辅助完成毕业论文。这些工具不仅能够帮助学生高效地完成内容生成、结构搭建,还…

2025 Java 转网安必看:从技能迁移到岗位选择,附 40-150 万安全岗薪资拆解!

从卷Java到冲网安:计算机人2025自救路线图(附安全岗年薪40-150万) 只要你敢学我就敢教!500集黑客入狱教程,从入门到入狱!全程干货无废话,学不会我退网! 计算机专业未来发展全景图&…

从0到1讲解什么是JVM:Java程序员必须掌握的核心知识(附Spring Boot实战案例)

视频看了几百小时还迷糊?关注我,几分钟让你秒懂!一、什么是JVM?小白也能听懂的解释JVM(Java Virtual Machine),中文叫 Java虚拟机,是运行Java程序的“发动机”。 你写的 .java 文件&…

满足成本与性能双重要求:AWS中为访问私有子网EC2的Lambda实施优化方案

一家公司使用 Amazon EC2 实例和 AWS Lambda 函数来运行其应用程序。该公司在其 AWS 账户中拥有包含公共子网和私有子网的 VPC。EC2 实例在其中一个 VPC 的私有子网中运行。Lambda 函数需要直接网络访问 EC2 实例以使应用程序工作。 该应用程序将运行至少 1 年。公司预计在此期…

网安小白狂喜!Web 安全入门指南:OWASP Top 10 + 漏洞实战,收藏这篇就够了!

Web 安全入门:从 OWASP Top 10 到常见漏洞 解构 Web 安全威胁图谱:从 OWASP Top 10 到典型攻击,筑牢数字防线 在 Web 应用成为业务核心载体的今天,安全漏洞已成为威胁数据隐私、业务稳定的 “隐形炸弹”。从 OWASP Top 10 划定的…

Spring循环依赖:原理、限制与解决方案深度解析

一、循环依赖的定义与本质在Spring框架中,循环依赖指的是两个或多个Bean之间存在直接或间接的相互引用关系,从而形成一个闭合的依赖环。简而言之,当BeanA依赖BeanB,同时BeanB也依赖BeanA时,便构成了典型的循环依赖。代…

并发编程中的CAS机制:原理、实现与应用剖析

在并发编程领域,确保线程安全通常首先会联想到加锁机制,如synchronized或ReentrantLock。虽然加锁是直观且广泛采用的方案,但在高并发场景下,锁带来的性能开销——如上下文切换、内核态切换及线程阻塞——可能成为系统瓶颈。为此&…

挖到宝了!专本科网安自学指南:不看学历,少走 2 年弯路,评论区蹲资料的来!

目录 前言自学网安第一阶段:打牢基础 学习这些基础知识有什么用呢? 第二阶段:化整为零 学习建议 第三阶段:实战演练 实践技巧 第四阶段:找准定位 深入学习建议学习要避开的弯路自学失败的原因有很多 最后:…

想做项目经理之前,这几件事你最好先想清楚

年底,很多人开始认真考虑职业走向的问题。“现在这条路,真的要一直走下去吗?”有人在项目经理岗位上开始动念: 要不要换个环境?是不是公司问题? 也有人是技术开发出身,看着身边的 PM&#xff0c…

进程的创建——如何理解fork()系统调用

进程的创建前言前置知识补充(重要)pid_t 的本质父进程和子进程exit(0) & break & continue辨析1. 核心区别对比表2. 逐个拆解(附代码例子)(1)exit(0):结束“整个程序”(2&am…

互斥信号量详解

互斥信号量是一种特殊的二值信号量,专为保护共享资源设计,通过优先级继承机制有效防止优先级翻转问题,确保高优先级任务能及时获取资源。一、互斥信号量的核心概念基本定义互斥信号量(Mutex)是一种特殊的二值信号量&am…

进程的创建——彻底搞懂fork()的好兄弟 execve()

exec()前言结语前言 上一篇文章我们介绍了fork()系统调用 但实际上程序在加载以及运行的过程中还需要搭配execve函数核心结论先记住:exec() 的作用是 “替换当前进程的代码和数据”(让一个进程执行全新的程…

视频太大发不出去?教你3招“无损”压缩,内存省一半,画质不打折!

现在的手机摄像头越来越卷,动不动就是4K 60帧、杜比视界录制。视频拍出来是清晰了,但副作用也很明显:体积太大了!录个几分钟的Vlog,文件大小直接飙到1GB甚至更多。不仅手机内存分分钟告急,想通过微信发给朋…

别只盯着To C了!李开复最新预言:AI Agent的终极战场在To B,搞错方向就完了!

历经2025年一整年的飞速发展,AI Agent在B端的价值早已突破“降本增效”的浅层定位,进入驱动企业业务增长的阶段。 零一万物创始人兼CEO李开复总结,零一万物2025年的核心打法,就是聚焦少数“灯塔型”大客户做深度合作,…

队列集详解

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

【数据库】时序数据智能基座:Apache IoTDB 选型与深度实践指南

引言:时序数据处理的新范式 随着工业4.0、智能制造和能源互联网的快速发展,企业面临海量设备产生的高并发、高频率时序数据处理难题。传统架构中“采集—存储—导出—分析”的链路存在数据迁移成本高、实时性差、系统耦合复杂等问题。 Apache IoTDB 作…

别再挨个翻了!今日 arXiv 精选:多模态大模型+图像生成篇,一张海报看懂未来!

AI论文热榜为您每日精选arXiv优秀论文,用LLM总结成学术海报,一图一览全文。 本篇包含:多模态大模型(视觉基础模型 开放词汇),图像和视频生成。那么,如何系统的去学习大模型LLM? 作为…

更新:2025年5月-企业互联网数据中心相关数据

1、数据简介 在数字化转型加速推进的背景下,算力作为新型生产力的核心要素,其部署与利用效率成为衡量企业竞争力的重要指标。许诺等学者(2025)聚焦于算力部署领域,开展了深入细致的研究,并将研究成果发表于…

导师推荐9个AI论文写作软件,自考毕业论文轻松搞定!

导师推荐9个AI论文写作软件,自考毕业论文轻松搞定! AI 工具助力论文写作,轻松应对自考挑战 在当今快速发展的学术环境中,自考学生面临着越来越多的写作压力。从选题到撰写,再到查重和修改,每一个环节都可能…

漏洞扫描工具深度对比:Burp Suite vs. ZAP

一、工具定位与背景核心解析 1.1 Burp Suite:企业级Web安全审计标杆 开发背景:PortSwigger公司推出的商业化渗透测试套件(2003年至今) 市场定位:专业安全团队的全生命周期Web应用安全解决方案 代表用户:…