博主提供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# 仅关闭关键点显示)核心功能说明
动态参数控制:
- 通过
show_bbox/show_segment/show_pose布尔参数精确控制三类标注的显示 - 参数默认全开启,符合常规可视化需求
- 通过
智能标注过滤:
- 根据 COCO 标注字段自动识别类型:
- bbox: 包含
bbox字段 - segment: 包含
segmentation字段(支持 RLE/多边形格式) - pose: 包含
keypoints字段
- bbox: 包含
- 避免手动类型判断,直接通过字段存在性过滤
- 根据 COCO 标注字段自动识别类型:
图像加载优化:
- 自动处理图像路径拼接
- 支持随机图像选择(未指定
img_id时)
可视化增强:
- 自动关闭坐标轴,突出标注内容
- 添加图像 ID 标题便于定位
- 可调节显示尺寸适应不同场景
高级用法扩展
自定义样式控制:
# 在 showAnns 前添加样式参数coco.showAnns(filtered_anns,box_color=(255,0,0),# bbox 颜色segment_color=(0,255,0),# segment 颜色keypoint_color=(0,0,255))# pose 颜色批量处理模式:
# 遍历指定图像ID列表forimg_idintarget_ids:visualize_coco_annotations(...,img_id=img_id)结果保存:
plt.savefig(f"visualize_{target_id}.jpg",bbox_inches='tight')
常见问题处理
- 缺失字段处理:当某类标注不存在时,对应参数自动失效(如无分割标注时
show_segment无效) - 坐标兼容性:自动处理 COCO 的归一化坐标(需确保图像尺寸正确)
- 内存优化:大尺寸图像建议使用
plt.close()及时释放资源
该函数完整实现了参数化控制三类标注的可视化需求,可直接集成到数据验证、模型调试等流程中,通过灵活参数配置适应不同场景的可视化需求。