You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用YOLOv8与Python获取检测目标名称并绘制边界框

YOLOv8目标检测:提取目标名称并绘制边界框

以下是实现获取检测目标名称+绘制边界框的完整可运行代码:

import cv2
from ultralytics import YOLO

def main():
    cap = cv2.VideoCapture(0)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

    model = YOLO("yolov8n.pt")

    while True:
        ret, frame = cap.read()
        if not ret:
            break
            
        # 执行检测
        result = model(frame, agnostic_nms=True)[0]
        
        # 遍历所有检测到的边界框
        for box in result.boxes:
            # 1. 获取类别ID和目标名称
            # 将tensor类型的类别ID转为整数
            cls_id = int(box.cls[0])
            # 通过result.names字典映射得到目标名称
            obj_name = result.names[cls_id]
            
            # 2. 获取边界框坐标(xyxy格式:左上x,左上y,右下x,右下y)
            x1, y1, x2, y2 = map(int, box.xyxy[0])
            
            # 3. 获取置信度
            conf = float(box.conf[0])
            
            # 4. 绘制边界框和文本
            # 画矩形框
            cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
            # 绘制目标名称+置信度文本
            text = f"{obj_name}: {conf:.2f}"
            cv2.putText(frame, text, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,255,0), 2)
        
        # 显示结果帧
        cv2.imshow("YOLOv8 Detection", frame)
        
        # 按ESC退出
        if cv2.waitKey(30) == 27:
            break

    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

关键步骤说明

  • 获取目标名称:
    result.boxes.cls返回tensor类型的类别ID数组,每个元素对应一个检测目标。通过int(box.cls[0])将单目标的类别张量转为整数ID,再用result.names[cls_id]即可拿到对应的目标名称(比如ID=0对应'person')。
  • 提取边界框坐标:
    box.xyxy[0]返回当前目标的边界框坐标(左上x、左上y、右下x、右下y),用map(int, ...)转为整数后直接传给cv2.rectangle绘制。
  • 添加置信度文本:
    把目标名称和格式化后的置信度(保留两位小数)组合成文本,用cv2.putText绘制在边界框上方。

补充说明

  • 代码增加了if not ret:判断,处理摄像头读取失败的异常情况。
  • 保留原代码中的agnostic_nms=True参数,用于消除不同类别目标的重复检测框。

内容的提问来源于stack exchange,提问作者Ganessa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:12:57