兄弟们看看完整报错内容:
Traceback (most recent call last):
File "<string>", line 12, in <module>
cv2.error: OpenCV(4.6.0) :-1: error: (-5:Bad argument) in function 'rectangle'
> Overload resolution failed:
> - Layout of the output array img is incompatible with cv::Mat
> - Expected Ptr<cv::UMat> for argument 'img'
> - Layout of the output array img is incompatible with cv::Mat
> - Expected Ptr<cv::UMat> for argument 'img'
我这边想检查一下数据有效性,于是中间取数据绘图看下是不是 x c y c w h x_cy_cwh xcycwh
im = img.permute(1, 2, 0).numpy()
im = (im * [0.229, 0.224,0.225] + [0.485, 0.456, 0.406]) * 255
im = im.astype(int).astype("uint8")
h, w, _ = im.shape
bbox = target[2]['boxes'][0].cpu().numpy() * [w, h, w, h]
xc, yc, bw, bh = bbox.astype(int)
x1, y1, x2, y2 = int(xc-bw//2), int(yc-bh//2), int(xc+bw//2), int(yc+bh//2)
# im = np.ascontiguousarray(im)
xx = cv2.rectangle(im, (x1, y1), (x2, y2), 255, 2, 8) # 这里报了错
cv2.imwrite("xxx.png", im)
结果在 cv2.rectangle
那里报了错,Layout不兼容,意思是内存布局不兼容,那就调用np.ascontiguousarray,让它变成C连续数组就好
im = np.ascontiguousarray(im)
xx = cv2.rectangle(im, (x1, y1), (x2, y2), 255, 2, 8) # 这里报了错