吉祥猴378 2024-07-28 19:26 采纳率: 95.8%
浏览 9
已结题

哪位大姥,知道为什么我用的opencv库对yolov5目标检测不出来,无法出现边框

monitor = {  
    "left": 0,
    "top": 0,
    "width": 2560,
    "height": 14
img = scr.grab(monitor) 
img = np.array(img)  

img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)  
model = model.to(device)
results =model(img) 
boxes, labels, confidences = results  
for box, label, confidence in zip(boxes, labels, confidences):
    cv2.rectangle(img, (int(box[0]), int(box[1])), (int(box[2]), int(box[3])), (0, 255, 0), 2)
cv2.namedWindow('SF_TRT', cv2.WINDOW_NORMAL)  
cv2.imshow('SF_TRT', img)
k = cv2.waitKey(1)
if k % 256 == 27:
    cv2.destroyALLWINDOWS()
  • 写回答

1条回答 默认 最新

  • 专家-司宇[在线] 2024-07-28 19:26
    关注

    引自免费微信小程序:皆我百晓生

    针对你的问题,以下是可能的原因和解决方案:

    1. 模型问题:确保你使用的YOLOv5模型已经训练好并且适用于你的检测任务。如果模型没有正确训练或者不适用于目标检测任务,可能无法检测到任何目标。
    2. 输入图像问题:确认你的输入图像img是正确的并且已经经过了适当的预处理。在这里你使用了cv2.cvtColor来转换颜色空间,这是正确的步骤。但是,要确保scr.grab(monitor)正确捕获了图像并且图像的尺寸与模型输入相匹配。
    3. 设备问题:确保你的模型已经移动到了正确的设备上(例如GPU)。使用model.to(device)是正确的做法,但确保device已经被正确设置。
    4. 目标检测结果的获取:确认model(img)的输出是否正确。results = model(img)应该返回一个包含边界框、标签和置信度的列表或数组。检查boxes, labels, confidences是否都包含有效的数据。
    5. 绘制边框的问题:在循环中绘制矩形边框时,确保坐标是正确的。cv2.rectangle需要四个整数坐标(左上角和右下角)。请检查(int(box[0]), int(box[1]), int(box[2]), int(box[3]))是否给出了有效的坐标。此外,确认颜色(在这里是(0, 255, 0),即绿色)和线条粗细(在这里是2)是否正确。
    6. 显示问题:如果图像没有显示或没有边框显示,可能是因为你没有在循环中等待足够的时间或者没有正确关闭窗口。尝试增加cv2.waitKey()的等待时间或使用其他方法确保图像正确显示。另外,检查是否正确地使用了cv2.destroyAllWindows()来关闭窗口。

    为了帮助你进一步调试,你可以尝试以下步骤:

    • 打印模型的输出(边界框、标签和置信度)以检查数据是否正确。
    • 在绘制矩形边框之前,单独显示输入图像以确保图像捕获是正确的。
    • 检查你的环境是否安装了正确版本的OpenCV和YOLOv5的相关依赖。

    如果以上步骤仍然无法解决问题,建议查看YOLOv5的官方文档或相关社区以获取更具体的帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 8月6日
  • 已采纳回答 7月29日
  • 创建了问题 7月28日