普通网友 2024-03-23 13:49 采纳率: 18.2%
浏览 83

yolov5的opencv报错问题

做yolov5的ui界面出现的问题

import torch
model = torch.hub.load('.', 'custom', r'E:\yolov5-v5.0\runs\train\exp8\weights\best.pt', source='local')
img = r"E:\yolov5-v5.0\VOCdevkit\images\train\cat.2.jpg"
results = model(img)
results.show()
results.render()[0]

报错
error: OpenCV(4.9.0) :-1: error: (-5:Bad argument) in function 'rectangle'

Overload resolution failed:

  • img marked as output argument, but provided NumPy array marked as readonly
  • Expected Ptrcv::UMat for argument 'img'
  • argument for rectangle() given by name ('thickness') and position (4)
  • argument for rectangle() given by name ('thickness') and position (4)
    请问该如何解决
  • 写回答

4条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-03-23 13:49
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述: 执行yolov5的ui界面代码时出现了错误。 错误提示: OpenCV(4.9.0) :-1: error: (-5:Bad argument) in function 'rectangle' Overload resolution failed:
    • img marked as output argument, but provided NumPy array marked as readonly
    • Expected Ptrcv::UMat for argument 'img'
    • argument for rectangle() given by name ('thickness') and position (4)
    • argument for rectangle() given by name ('thickness') and position (4) 解决方案: 该错误提示是由使用OpenCV中的rectangle()函数时导致的。 第一个错误提示“img marked as output argument, but provided NumPy array marked as readonly”,表示传递给rectangle()函数的参数img是只读的NumPy数组,但该函数期望接收一个可写的UMat对象。因此,我们需要使用cv2.UMat()函数将NumPy数组转换成可写的UMat对象。 第二个错误提示“Expected Ptrcv::UMat for argument 'img'”,也是由于传递给rectangle()函数的img参数是NumPy数组,而函数期望接收一个UMat对象。 第三个和第四个错误提示“argument for rectangle() given by name ('thickness') and position (4)”表示函数的第四个参数thickness传递了两次。在执行函数时应该只有一个参数thickness。 下面是修改后的代码:
    import cv2
    import torch
    model = torch.hub.load('.', 'custom', r'E:\yolov5-v5.0\runs\train\exp8\weights\best.pt', source='local')
    img_path = r"E:\yolov5-v5.0\VOCdevkit\images\train\cat.2.jpg"
    img = cv2.imread(img_path)
    results = model(img)
    bbox = results.xyxy[0].cpu().numpy()  
    for i in range(len(bbox)):
        box = bbox[i]
        x1, y1, x2, y2, conf, cls = int(box[0]), int(box[1]), int(box[2]), int(box[3]), box[4], int(box[5])
        cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), thickness=2)
        text = f'{conf:.2f}, class: {cls}'
        cv2.putText(img, text, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
    cv2.imshow('result', img)
    cv2.waitKey(0)
    

    我们通过cv2.imread()函数读取了一张测试图片,然后通过yolov5模型获取了目标框的坐标信息bbox。 最后,我们遍历bbox,通过cv2.rectangle()和cv2.putText()函数在原始图像上画出目标框和类别信息,并用cv2.imshow()函数显示结果。 注意:在执行完整个程序后,要释放图像窗口,使用cv2.destroyAllWindows()函数关闭OpenCV窗口。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月23日

悬赏问题

  • ¥15 SQL Server下载
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求