def post_process_opencv(outputs,model_h,model_w,img_h,img_w,thred_nms,thred_cond): # 获取置信度、中心点坐标、宽和高 conf = outputs[:,4].tolist() c_x = outputs[:,0]/model_w*img_w c_y = outputs[:,1]/model_h*img_h w = outputs[:,2]/model_w*img_w h = outputs[:,3]/model_h*img_h p_cls = outputs[:,5:] # 如果是一维向量,则扩展为二维 if len(p_cls.shape)==1: p_cls = np.expand_dims(p_cls,1) # 获取类别ID cls_id = np.argmax(p_cls,axis=1) # 计算四个边缘坐标 p_x1 = np.expand_dims(c_x-w/2,-1) p_y1 = np.expand_dims(c_y-h/2,-1) p_x2 = np.expand_dims(c_x+w/2,-1) p_y2 = np.expand_dims(c_y+h/2,-1) areas = np.concatenate((p_x1,p_y1,p_x2,p_y2),axis=-1) # 转换为列表格式 areas = areas.tolist() # 应用非极大值抑制算法获取IDs ids = cv2.dnn.NMSBoxes(areas,conf,thred_cond,thred_nms) # 返回包含筛选后的区域、置信度和类别ID的数据列表 return [np.array(areas)[ids],np.array(conf)[ids],cls_id[ids]]以上代码报错Traceback (most recent call last): File "detect_onnx.py", line 112, in <module> outs=post_process_opencv(outs,320,320,480,640,0.4,0.5) File "detect_onnx.py", line 60, in post_process_opencv ids = cv2.dnn.NMSBoxes(areas,conf,thred_cond,thred_nms) TypeError: Can't convert vector element for 'bboxes', index=0
时间: 2024-01-31 12:04:16 浏览: 82
image-process.rar_image_image process_learning opencv_opencv noi
这个错误通常是由于 `areas` 向量中的元素不是整数或浮点数类型,导致不能被转换为 `cv::Rect` 类型。建议将 `areas` 向量中的元素转换为整数或浮点数类型,可以使用 `astype()` 方法来实现这一点。例如,可以像下面这样修改代码:
```
# 将 areas 转换为列表格式,并将元素转换为整数类型
areas = areas.astype(int).tolist()
# 应用非极大值抑制算法获取IDs
ids = cv2.dnn.NMSBoxes(areas, conf, thred_cond, thred_nms)
# 返回包含筛选后的区域、置信度和类别ID的数据列表
return [np.array(areas)[ids], np.array(conf)[ids], cls_id[ids]]
```
这样就可以避免这个错误了。如果还有问题,请检查代码中的其他部分是否存在错误。
阅读全文