numpy array 报错 Layout of the output array img is incompatible with cv::Mat

兄弟们看看完整报错内容:

Traceback (most recent call last):
  File "", 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)   # 这里报了错

你可能感兴趣的:(numpy,python,opencv)