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

Yolov5实时屏幕截图检测报错,请求技术排查

问题排查与解决方案

核心问题分析

  • 图像通道不匹配:mss截图输出的是BGRA四通道图像,而YOLOv5模型默认处理RGB三通道图像,直接传入会导致推理异常。
  • Results对象无法直接显示:model(img)返回的是YOLOv5封装的Results实例,不能直接作为cv2.imshow的输入,需要提取渲染后的可视化图像。

修改后的完整代码

import time
import torch
import cv2
import mss
import numpy as np

# 加载自定义模型
model = torch.hub.load('ultralytics/yolov5', 'custom', path='last_210_epochs_Size1280.pt') 

with mss.mss() as sct:
    # 选择要捕获的屏幕(mss monitors索引从1开始,1为主屏幕,2为副屏,按需调整)
    monitor = sct.monitors[1]

    while True:
        last_time = time.time()

        # 获取屏幕截图并转为numpy数组
        img = np.array(sct.grab(monitor))
        # 将BGRA格式转为YOLOv5需要的RGB格式
        img_rgb = cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)

        # 模型推理
        results = model(img_rgb)
        
        # 提取绘制好检测框的图像,转为OpenCV兼容的BGR格式
        img_result = results.render()[0]
        img_result_bgr = cv2.cvtColor(img_result, cv2.COLOR_RGB2BGR)

        # 实时显示检测结果
        cv2.imshow('Real-time Detection', img_result_bgr)

        print(f"fps: {1 / (time.time() - last_time):.2f}")

        # 按q键退出循环
        if cv2.waitKey(25) & 0xFF == ord("q"):
            cv2.destroyAllWindows()
            break

关键修改点说明

  1. 图像格式适配:

    • 用cv2.COLOR_BGRA2RGB将mss截图转为模型支持的RGB格式,解决通道不兼容问题
    • 推理后用cv2.COLOR_RGB2BGR将模型输出的RGB图像转为OpenCV默认的BGR格式,确保显示正常
  2. Results对象处理:

    • 调用results.render()会生成带检测框和标签的可视化图像列表,取[0]获取当前帧的渲染结果,这是cv2.imshow可直接接收的numpy数组
  3. 屏幕索引校验:

    • mss的monitors列表中,索引1对应主屏幕,索引2对应副屏,确认你需要捕获的屏幕编号,避免因捕获空区域引发异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:00:45