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

如何在OpenCV中集成Ultralytics YOLOv8,获取边界框并同步监控类别及显示标注图?

OpenCV与YOLOv8集成实现检测需求解决方案

以下是满足你需求的完整代码,同时实现获取边界框坐标、在OpenCV窗口显示标注后图像、实时监控预测类别名称三个功能:

from ultralytics import YOLO
import cv2

# 加载YOLOv8n模型
model = YOLO('yolov8n.pt')
# 初始化摄像头
cap = cv2.VideoCapture(0)
cap.set(3, 640)  # 设置画面宽度
cap.set(4, 480)  # 设置画面高度

while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    # 模型预测(无需转换RGB,YOLOv8自动兼容OpenCV的BGR格式)
    results = model.predict(frame, verbose=False)  # verbose=False关闭默认日志输出
    
    for result in results:
        # 遍历每个检测框
        for box in result.boxes:
            # 获取边界框坐标(xyxy格式:左上角x1,y1,右下角x2,y2)
            x1, y1, x2, y2 = map(int, box.xyxy[0])
            # 获取类别索引和对应名称
            cls_idx = int(box.cls[0])
            cls_name = model.names[cls_idx]
            
            # 实时打印监控类别名称
            print(f"检测到类别: {cls_name}")
            
            # 在图像上绘制边界框和类别标签
            cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
            cv2.putText(frame, cls_name, (x1, y1 - 10), 
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
    
    # 显示标注后的图像
    cv2.imshow('YOLO V8 Detection', frame)
    # 按空格退出程序
    if cv2.waitKey(1) & 0xFF == ord(' '):
        break

# 释放摄像头资源并关闭窗口
cap.release()
cv2.destroyAllWindows()

关键功能说明:

  • 获取边界框坐标:通过box.xyxy[0]直接获取检测框的左上角、右下角坐标,转换为整数后可用于后续处理。
  • 显示标注后图像:用OpenCV的cv2.rectangle绘制绿色边界框,cv2.putText添加类别标签,最后通过cv2.imshow展示处理后的画面。
  • 监控类别名称:遍历检测框时,通过model.names[cls_idx]映射得到类别名称并打印,实现实时监控。

优化点说明:

  • 移除了不必要的BGR2RGB格式转换,YOLOv8的predict方法支持直接传入OpenCV的BGR格式图像。
  • 加入verbose=False关闭模型默认的预测日志,避免干扰类别监控的打印信息。
  • 增加ret值判断,防止摄像头读取失败导致程序报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:20:38