# OpenCV报错Overload resolution failed
# 报错描述
在使用cv2.rectangle/cv2.circle/cv2.line/cv2.drawContours
时有时候会遇到报错如下:
---------------------------------------------------------------------------
error Traceback (most recent call last)
Input In [19], in <cell line: 3>()
1 mask = np.zeros((100, 100), dtype=np.uint)
2 ct = np.array([[10,10], [20,10], [20,20],[10,20]], dtype=np.int32)
----> 3 cv2.drawContours(mask, [ct], -1, 255, 2)
error: OpenCV(4.8.1) :-1: error: (-5:Bad argument) in function 'drawContours'
> Overload resolution failed:
> - Layout of the output array image is incompatible with cv::Mat
> - Expected Ptr<cv::UMat> for argument 'image'
这个问题根据提示是output
有问题,这就很奇怪,这个函数并没有返回image
,图形是直接画在输入上的,因此可以看看输入有没有问题。
# 原因及解决方案
OpenCV
处理的图像数据类型,需要是uint8
,根据上面报错提示的信息可以看到,
mask = np.zeros((100, 100), dtype=np.uint)
mask
的数据类型是uint
型,np.uint
等价于numpy.uint64
,因此这里数据类型有误导致的,改成
mask = np.zeros((100, 100), dtype=np.uint8)
即可在其中画图形。