0

0

标题:YOLOv8 中仅显示分割掩码与标签(去除边界框)的完整实现教程

碧海醫心

碧海醫心

发布时间:2026-01-02 13:05:41

|

308人浏览过

|

来源于php中文网

原创

标题:YOLOv8 中仅显示分割掩码与标签(去除边界框)的完整实现教程

本文详解如何在 yolov8(ultralytics v8.0.132)中保存或可视化实例分割结果时,**移除边界框(boxes)但保留类别标签和置信度文本**,并提供可直接运行的自定义绘图方案。

YOLOv8 的 predict() 方法虽支持 boxes=False 来禁用边界框绘制,但官方渲染器(尤其是 segment 模式)在 boxes=False 时会连带屏蔽所有标签(labels)和置信度(conf)文本——这是由底层 Annotator 类的设计逻辑决定的:标签文本默认锚定在边界框左上角,一旦框被禁用,文本渲染即被跳过。因此,单纯依赖 show_labels=True 或 probs=True 参数组合会触发配置校验错误(如 SyntaxError: unrecognized arguments),因为这些参数在无框模式下不被 SegmentPredictor 支持。

✅ 正确解法是:绕过内置 save=True 渲染,手动提取预测结果(掩码、类别、置信度),使用 OpenCV + PIL 自定义叠加。以下是经过验证、结构清晰、开箱即用的实现方案:

CodeSquire
CodeSquire

AI代码编写助手,把你的想法变成代码

下载

✅ 完整可运行代码(适配 YOLOv8 分割任务)

import numpy as np
import cv2
import matplotlib.pyplot as plt
from PIL import Image
from torchvision.transforms import functional as F
from ultralytics import YOLO

# 1. 加载模型与预测
model = YOLO("path/to/best.pt")  # 替换为你的模型路径
results = model.predict("path/to/image.png", conf=0.3, save=False)  # ⚠️ 关键:save=False,避免默认渲染

# 2. 提取首张图像结果(batch size=1)
r = results[0]
if not hasattr(r, 'masks') or r.masks is None:
    print("⚠️ 未检测到分割掩码,请检查模型是否为 segmentation 类型(.pt 文件需支持 masks)")
    exit()

# 3. 加载原始图像(RGB)
img_pil = Image.open("path/to/image.png").convert("RGB")
img_np = np.array(img_pil)  # 形状: (H, W, 3)
annotated = img_np.copy()

# 4. 遍历每个掩码实例并绘制
for i, (mask_tensor, box) in enumerate(zip(r.masks.data, r.boxes)):
    # ▶️ 步骤 1:上采样掩码至原图尺寸(保持二值性)
    h, w = img_np.shape[:2]
    mask_resized = F.resize(mask_tensor.unsqueeze(0), (h, w), antialias=True).squeeze(0)
    mask_binary = (mask_resized > 0.5).cpu().numpy()  # 转为布尔 NumPy 掩码

    # ▶️ 步骤 2:应用半透明彩色覆盖(可选:更换颜色)
    color = np.array([0, 128, 255])  # BGR 格式(OpenCV 使用)→ 这里是蓝绿色
    annotated[mask_binary] = (annotated[mask_binary] * 0.5 + color * 0.5).astype(np.uint8)

    # ▶️ 步骤 3:提取标签与置信度
    cls_id = int(box.cls.item())
    conf = float(box.conf.item())
    label = f"{r.names[cls_id]}: {conf:.2f}"

    # ▶️ 步骤 4:定位文本位置(使用边界框左上角,更鲁棒;也可改用掩码质心)
    xyxy = box.xyxy.cpu().numpy()[0]
    x1, y1 = int(xyxy[0]), int(xyxy[1])
    # 防止文字超出图像边界
    x1 = max(10, min(x1, w - 150))
    y1 = max(25, min(y1, h - 10))

    # ▶️ 步骤 5:用 OpenCV 绘制白色粗体文本
    cv2.putText(
        annotated,
        label,
        (x1, y1),
        cv2.FONT_HERSHEY_SIMPLEX,
        0.7,
        (255, 255, 255),  # 白色文字
        2,
        cv2.LINE_AA
    )

# 5. 可视化结果
plt.figure(figsize=(10, 8))
plt.imshow(annotated)
plt.axis('off')
plt.title("YOLOv8 Segmentation — Masks + Labels (No Boxes)", fontsize=14, pad=15)
plt.show()

# ✅ 可选:保存结果图
Image.fromarray(annotated).save("output_no_boxes_with_labels.png")
print("✅ 已保存:output_no_boxes_with_labels.png")

? 关键说明与注意事项

  • 模型要求:确保你使用的是 YOLOv8-seg 模型(训练时指定 task=segment,导出 .pt 文件包含 masks 层)。分类(classify)或检测(detect)模型无法输出 r.masks。
  • 掩码缩放:torchvision.transforms.functional.resize 是推荐方式(支持 antialias=True),比双线性插值更保真;避免使用 cv2.resize 直接缩放浮点掩码。
  • 颜色策略:示例中使用固定色叠加(半透明),你可按 cls_id 动态分配颜色(如 plt.cm.tab10(cls_id % 10)),增强可区分性。
  • 文本定位优化:当前使用 box.xyxy 左上角,若需更精准(如贴合掩码顶部),可用 cv2.findContours + cv2.boundingRect 计算掩码最小外接矩形。
  • 性能提示:对高分辨率图像,可先缩放输入再预测(imgsz=640),或对掩码做 cv2.dilate 膨胀后绘制,提升视觉清晰度。

✅ 总结

YOLOv8 官方 API 尚未开放“仅隐藏框、保留标签”的细粒度控制选项(尤其在分割模式下)。因此,手动后处理是当前最稳定、最灵活的解决方案。本教程提供的代码已通过 Ultralytics v8.0.132 实测,兼容 Jupyter Notebook 与脚本环境,支持多类别、多实例、任意分辨率图像,并兼顾可读性与扩展性。如未来版本支持 show_boxes=False 下的独立 show_labels 开关,只需升级库并切换参数即可无缝迁移。

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

43

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

35

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

41

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

204

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

9

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

8

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
誉天教育RHCE视频教程
誉天教育RHCE视频教程

共9课时 | 1.4万人学习

尚观Linux RHCE视频教程(二)
尚观Linux RHCE视频教程(二)

共34课时 | 5.6万人学习

尚观RHCE视频教程(一)
尚观RHCE视频教程(一)

共28课时 | 4.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号