Traceback TypeError: Expected Ptr<cv::UMat> for argument 'img'. when try to delete columns and draw lines

Traceback TypeError: Expected Ptr<cv::UMat> for argument 'img'. when try to delete columns and draw lines

我想删除原始图像中的一些列,然后画一条线(或矩形或...)。如果我先画线然后删除列:

img = cv2.imread('image.jpg',0)

cv2.line(img,pt1=(0,0),pt2=(711,711),color=(102, 255, 255),thickness=10)
img= np.delete(img,list(range(400,500)),1)

plt.imshow(img,"gray")

没问题。但是当我先放下列然后画一条线(或矩形或其他..)

img = cv2.imread('image.jpg',0)


img= np.delete(img,list(range(400,500)),1)
cv2.line(img,pt1=(0,0),pt2=(711,711),color=(102, 255, 255),thickness=5)
plt.imshow(img,"gray")

有趣的是,这似乎不是行的问题,甚至复制问题仍然存在。不是维度的问题,也尝试丑陋的解决方案转置

img= np.delete(img.T, list(range(400,500)),0),T
cv2.line(img,pt1=(0,0),pt2=(711,711),color=(102, 255, 255),thickness=5)
plt.imshow(img,"gray")

但还是不行。

真是奇怪的情况。

print(type(img)) 之前和之后 np.delete() 显示 <class 'numpy.ndarray'> 所以我不知道是什么问题。

但是如果我使用 .copy() 那么它就可以正常工作。

img = np.delete(img, list(range(400,500)), 1).copy()
#img = np.delete(img.T, list(range(400,500)), 0).T.copy()
cv2.line(img, pt1=(0,0), pt2=(711,711), color=(102, 255, 255), thickness=10)

也许 np.delete() 是一些“惰性”函数,它不会直接创建新的 numpy,而是在需要时创建,但在 cv2.line()[=19 中需要时它不会创建=]

也许您应该将此问题发送给 numpycv2

的作者